Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat(deps): update helm release cost-analyzer to v2.5.1 #899

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

renovate[bot]
Copy link
Contributor

@renovate renovate bot commented Dec 6, 2024

This PR contains the following updates:

Package Update Change
cost-analyzer minor 2.4.3 -> 2.5.1

Configuration

📅 Schedule: Branch creation - At any time (no schedule defined), Automerge - At any time (no schedule defined).

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

Copy link
Contributor

github-actions bot commented Dec 6, 2024

Changes Default Values
diff -U 4 -r out-default-values/target/kubecost_cost-analyzer_default-values.out out-default-values/pr/kubecost_cost-analyzer_default-values.out
--- out-default-values/target/kubecost_cost-analyzer_default-values.out	2024-12-06 17:43:41.748488493 +0000
+++ out-default-values/pr/kubecost_cost-analyzer_default-values.out	2024-12-06 17:43:16.032171875 +0000
@@ -2,11 +2,12 @@
   # zone: cluster.local (use only if your DNS server doesn't live in the same zone as kubecost)
   prometheus:
     enabled: true  # Kubecost depends on Prometheus data, it is not optional. When enabled: false, Prometheus will not be installed and you must configure your own Prometheus to scrape kubecost as well as provide the fqdn below. -- Warning: Before changing this setting, please read to understand the risks https://docs.kubecost.com/install-and-configure/install/custom-prom
     fqdn: http://cost-analyzer-prometheus-server.default.svc  # example address of a prometheus to connect to. Include protocol (http:// or https://) Ignored if enabled: true
-    # insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
+    insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
     # queryServiceBasicAuthSecretName: dbsecret # kubectl create secret generic dbsecret -n kubecost --from-file=USERNAME --from-file=PASSWORD
     # queryServiceBearerTokenSecretName: mcdbsecret  # kubectl create secret generic mcdbsecret -n kubecost --from-file=TOKEN
+    kubeRBACProxy: false  # If true, kubecost will use kube-rbac-proxy to authenticate with in cluster Prometheus for openshift
 
   grafana:
     enabled: true  # If false, Grafana will not be installed
     domainName: cost-analyzer-grafana.default.svc  # example grafana domain Ignored if enabled: true
@@ -53,8 +54,10 @@
   # or `global.prometheus.fqdn=http://{{ template "cost-analyzer.fullname" . }}-mimir-proxy.{{ .Release.Namespace }}.svc:8085/prometheus'
   # Learn more at https://grafana.com/docs/mimir/latest/operators-guide/secure/authentication-and-authorization/#without-an-authenticating-reverse-proxy
   mimirProxy:
     enabled: false
+    ## Annotations to be added to the Mimir Proxy deployment template
+    annotations: {}
     name: mimir-proxy
     image: nginxinc/nginx-unprivileged
     port: 8085
     mimirEndpoint: $mimir_endpoint  # Your Mimir query endpoint. If your Mimir query endpoint is http://example.com/prometheus, replace $mimir_endpoint with http://example.com/
@@ -62,11 +65,10 @@
     # basicAuth:
       # username: user
       # password: pwd
 
-  # Azure Monitor Managed Service for Prometheus
-  # See https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/azure-monitor/essentials/prometheus-metrics-overview.md for information
-  # and https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines for more information on setting this up
+  ## Azure Monitor Managed Service for Prometheus
+  ## Ref: https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines
   ammsp:
     enabled: false
     prometheusServerEndpoint: http://localhost:8081/
     remoteWriteService: $<AMMSP_METRICS_INGESTION_ENDPOINT>
@@ -83,76 +85,68 @@
       identityType: userAssigned
       aadClientId: $<AZURE_MANAGED_IDENTITY_CLIENT_ID>
       aadTenantId: $<AZURE_MANAGED_IDENTITY_TENANT_ID>
 
+  ## Kubecost Alerting
+  ## Ref: http://docs.kubecost.com/alerts
   notifications:
-    # Kubecost alerting configuration
-    # Ref: http://docs.kubecost.com/alerts
     # alertConfigs:
-      # frontendUrl: http://localhost:9090 # optional, used for linkbacks
-      # globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Slack alerts
-      # globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Microsoft Teams alerts
-      # globalAlertEmails:
-      #   - [email protected]
-      #   - [email protected]
-      # globalEmailSubject: Custom Subject
-      # Alerts generated by kubecost, about cluster data
-      # alerts:
-        # Daily namespace budget alert on namespace `kubecost`
-        # - type: budget                # supported: budget, recurringUpdate
-        #   threshold: 50               # optional, required for budget alerts
-        #   window: daily               # or 1d
-        #   aggregation: namespace
-        #   filter: kubecost
-        #   ownerContact:               # optional, overrides globalAlertEmails default
-        #     - [email protected]
-        #     - [email protected]
-        #   # optional, used for alert-specific Slack and Microsoft Teams alerts
-        #   slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
-        #   msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX
-
-        # Daily cluster budget alert on cluster `cluster-one`
-        # - type: budget
-        #   threshold: 200.8        # optional, required for budget alerts
-        #   window: daily           # or 1d
-        #   aggregation: cluster
-        #   filter: cluster-one     # does not accept csv
-
-        # Recurring weekly update (weeklyUpdate alert)
-        # - type: recurringUpdate
-        #   window: weekly          # or 7d
-        #   aggregation: namespace
-        #   filter: '*'
-
-        # Recurring weekly namespace update on kubecost namespace
-        # - type: recurringUpdate
-        #   window: weekly # or 7d
-        #   aggregation: namespace
-        #   filter: kubecost
-
-        # Spend Change Alert
-        # - type: spendChange         # change relative to moving avg
-        #   relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
-        #   window: 1d                # accepts ‘d’, ‘h’
-        #   baselineWindow: 30d       # previous window, offset by window
-        #   aggregation: namespace
-        #   filter: kubecost, default # accepts csv
-
-        # Health Score Alert
-        # - type: health              # Alerts when health score changes by a threshold
-        #   window: 10m
-        #   threshold: 5              # Send Alert if health scores changes by 5 or more
-
-        # Kubecost Health Diagnostic
-        # - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
-        #   window: 10m
+    #   frontendUrl: http://localhost:9090  # Optional
+    #   globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalAlertEmails:
+    #     - [email protected]
+    #     - [email protected]
+    #   globalEmailSubject: Custom Subject
+    #   alerts:
+    #     # Daily namespace budget alert on namespace `kubecost`
+    #     - type: budget                # supported: budget, recurringUpdate
+    #       threshold: 50               # optional, required for budget alerts
+    #       window: daily               # or 1d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #       ownerContact:               # optional, overrides globalAlertEmails default
+    #         - [email protected]
+    #         - [email protected]
+    #       slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #       msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #     # Daily cluster budget alert on cluster `cluster-one`
+    #     - type: budget
+    #       threshold: 200.8        # optional, required for budget alerts
+    #       window: daily           # or 1d
+    #       aggregation: cluster
+    #       filter: cluster-one     # does not accept csv
+    #     # Recurring weekly update (weeklyUpdate alert)
+    #     - type: recurringUpdate
+    #       window: weekly          # or 7d
+    #       aggregation: namespace
+    #       filter: '*'
+    #     # Recurring weekly namespace update on kubecost namespace
+    #     - type: recurringUpdate
+    #       window: weekly # or 7d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #     # Spend Change Alert
+    #     - type: spendChange         # change relative to moving avg
+    #       relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
+    #       window: 1d                # accepts ‘d’, ‘h’
+    #       baselineWindow: 30d       # previous window, offset by window
+    #       aggregation: namespace
+    #       filter: kubecost, default # accepts csv
+    #     # Health Score Alert
+    #     - type: health              # Alerts when health score changes by a threshold
+    #       window: 10m
+    #       threshold: 5              # Send Alert if health scores changes by 5 or more
+    #     # Kubecost Health Diagnostic
+    #     - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
+    #       window: 10m
 
     alertmanager:  # Supply an alertmanager FQDN to receive notifications from the app.
       enabled: false  # If true, allow kubecost to write to your alertmanager
       fqdn: http://cost-analyzer-prometheus-server.default.svc  # example fqdn. Ignored if prometheus.enabled: true
 
-    # Set saved Cost Allocation report(s) accessible from /reports
-    # Ref: http://docs.kubecost.com/saved-reports
+  ## Kubecost Saved Reports
+  ## Ref: http://docs.kubecost.com/saved-reports
   savedReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Example Saved Report 0"
@@ -160,35 +154,32 @@
         aggregateBy: "namespace"
         chartDisplay: "category"
         idle: "separate"
         rate: "cumulative"
-        accumulate: false  # daily resolution
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        accumulate: false   # daily resolution
+        filters:            # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "cluster"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: ":"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: ":"   # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "dev"
       - title: "Example Saved Report 1"
         window: "month"
         aggregateBy: "controllerKind"
         chartDisplay: "category"
         idle: "share"
         rate: "monthly"
         accumulate: false
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        filters:              # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "namespace"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: "!:"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: "!:"    # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "kubecost"
       - title: "Example Saved Report 2"
         window: "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z"
         aggregateBy: "service"
         chartDisplay: "category"
         idle: "hide"
         rate: "daily"
         accumulate: true  # entire window resolution
-        filters: []  # if no filters, specify empty array
-
-  # Set saved Asset report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
+        filters: []       # if no filters, specify empty array
   assetReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
     - title: "Example Asset Report 0"
@@ -197,11 +188,8 @@
       accumulate: false  # daily resolution
       filters:
         - property: "cluster"
           value: "cluster-one"
-
-  # Set saved Cloud Cost report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
   cloudCostReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Cloud Cost Report 0"
@@ -214,8 +202,12 @@
 
   podAnnotations: {}
     # iam.amazonaws.com/role: role-arn
 
+  # Annotations to be added for all controllers (StatefulSets, Deployments, DaemonSets)
+  annotations: {}
+    # iam.amazonaws.com/role: role-arn
+
   # Applies these labels to all Deployments, StatefulSets, DaemonSets, and their pod templates.
   additionalLabels: {}
 
   securityContext:
@@ -242,8 +234,15 @@
       route:
         enabled: false  # Create an OpenShift Route.
         annotations: {}  # Add annotations to the Route.
         # host: kubecost.apps.okd4.example.com  # Add a custom host for your Route.
+
+        # OPTIONAL. The following configs only to be enabled when using a Prometheus instance already installed in the cluster.
+        createMonitoringClusterRoleBinding: false  # Create a ClusterRoleBinding to grant the Kubecost serviceaccount access to query Prometheus.
+        createMonitoringResourceReaderRoleBinding: false  # Create a Role and Role Binding to allow Prometheus to list and watch Kubecost resources.
+        monitoringServiceAccountName: prometheus-k8s  # Name of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+        monitoringServiceAccountNamespace: openshift-monitoring  # Namespace of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+
       # Create Security Context Constraint resources for the DaemonSets requiring additional privileges.
       scc:
         nodeExporter: false  # Creates an SCC for Prometheus Node Exporter. This requires Node Exporter be enabled.
         networkCosts: false  # Creates an SCC for Kubecost network-costs. This requires network-costs be enabled.
@@ -258,18 +257,24 @@
       skipSanityChecks: false  # If true, skip all sanity/existence checks for resources like Secrets.
 
   ## Kubecost Integrations
   ## Ref: https://docs.kubecost.com/integrations
-  ##
   integrations:
+    turbonomic:
+      enabled: false         # Set to true to enable the Turbonomic integration
+      clientId: ""           # Client ID generated from the OAuth Client created
+      clientSecret: ""       # Client Secret generated from the OAuth Client created
+      role: ""               # Role that the OAuth Client was created with (e.g. ADMINISTRATOR, SITE_ADMIN, etc.)
+      host: ""               # URL to your turbonomic API. EG: https://turbonomic.example.com/
+      insecureClient: false  # Do not verify certificate
     postgres:
       enabled: false
-      runInterval: "12h"  # How frequently to run the integration.
-      databaseHost: ""  # REQUIRED. ex: my.postgres.database.azure.com
-      databasePort: ""  # REQUIRED. ex: 5432
-      databaseName: ""  # REQUIRED. ex: postgres
-      databaseUser: ""  # REQUIRED. ex: myusername
-      databasePassword: ""  # REQUIRED. ex: mypassword
+      runInterval: "12h"      # How frequently to run the integration.
+      databaseHost: ""        # REQUIRED. ex: my.postgres.database.azure.com
+      databasePort: ""        # REQUIRED. ex: 5432
+      databaseName: ""        # REQUIRED. ex: postgres
+      databaseUser: ""        # REQUIRED. ex: myusername
+      databasePassword: ""    # REQUIRED. ex: mypassword
       databaseSecretName: ""  # OPTIONAL. Specify your own k8s secret containing the above credentials. Must have key "creds.json".
 
       ## Configure what Postgres table to write to, and what parameters to pass
       ## when querying Kubecost's APIs. Ensure all parameters are enclosed in
@@ -303,8 +308,12 @@
 # nameOverride: ""
 ## Provide a full name override option for the chart.
 # fullnameOverride: ""
 
+## Provide additional labels for the chart.
+# chartLabels:
+#   app.kubernetes.io/name: kubecost-cost-analyzer
+
 ## This flag is only required for users upgrading to a new version of Kubecost.
 ## The flag is used to ensure users are aware of important
 ## (potentially breaking) changes included in the new version.
 ##
@@ -322,79 +331,77 @@
     region: "us-east-1"
     URI: s3://kc-csv-test/pricing_schema.csv  # a valid file URI
     csvAccessCredentials: pricing-schema-access-secret
 
-# SAML integration for user management and RBAC, enterprise key required
-# Ref: https://github.com/kubecost/docs/blob/main/user-management.md
+## Kubecost SAML (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-saml
 saml:
   enabled: false
-  # secretName: "kubecost-authzero"
-  # metadataSecretName: "kubecost-authzero-metadata" # One of metadataSecretName or idpMetadataURL must be set. defaults to metadataURL if set
-  # idpMetadataURL: "https://dev-elu2z98r.auth0.com/samlp/metadata/c6nY4M37rBP0qSO1IYIqBPPyIPxLS8v2"
-  # appRootURL: "http://localhost:9090" # sample URL
-  # authTimeout: 1440 # number of minutes the JWT will be valid
-  # redirectURL: "https://dev-elu2z98r.auth0.com/v2/logout" # callback URL redirected to after logout
-  # audienceURI: "http://localhost:9090" # by convention, the same as the appRootURL, but any string uniquely identifying kubecost to your samp IDP. Optional if you follow the convention
-  # nameIDFormat: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" If your SAML provider requires a specific nameid format
-  # isGLUUProvider: false # An additional URL parameter must be appended for GLUU providers
-  # encryptionCertSecret: "kubecost-saml-cert" # k8s secret where the x509 certificate used to encrypt an Okta saml response is stored
-  # decryptionKeySecret: "kubecost-sank-decryption-key" # k8s secret where the private key associated with the encryptionCertSecret is stored
-  # authSecret: "random-string" # value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
-  # authSecretName: "kubecost-saml-secret" # name of k8s secret where the authSecret will be stored, defaults to "kubecost-saml-secret" if not provided
+  # secretName: ""
+  # metadataSecretName: ""  # One of metadataSecretName or idpMetadataURL must be set. Defaults to idpMetadataURL if set.
+  # idpMetadataURL: ""
+  # appRootURL: ""
+  # authTimeout: 1440  # Number of minutes the JWT will be valid
+  # redirectURL: ""  # Callback URL redirected to after logout
+  # audienceURI: ""  # Usually the same as the appRootURL. Optionally any string uniquely identifying kubecost to your SAML IDP.
+  # nameIDFormat: ""  # If your SAML provider requires a specific nameid format
+  # isGLUUProvider: false  # An additional URL parameter must be appended for GLUU providers
+  # encryptionCertSecret: ""  # K8s secret storing the x509 certificate used to encrypt an Okta SAML response
+  # decryptionKeySecret: ""  # K8s secret storing the private key associated with the encryptionCertSecret
+  # authSecret: ""  # Value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
+  # authSecretName: ""  # Name of K8s secret where the authSecret will be stored. Defaults to "kubecost-saml-secret" if not provided.
   rbac:
     enabled: false
     # groups:
     #   - name: admin
-    #     enabled: false # if admin is disabled, all SAML users will be able to make configuration changes to the kubecost frontend
-    #     assertionName: "http://schemas.auth0.com/userType" # a SAML Assertion, one of whose elements has a value that matches on of the values in assertionValues
+    #     enabled: false  # If admin is disabled, all SAML users will be able to make configuration changes to the Kubecost frontend
+    #     assertionName: ""
     #     assertionValues:
     #       - "admin"
     #       - "superusers"
     #   - name: readonly
-    #     enabled: false # if readonly is disabled, all users authorized on SAML will default to readonly
-    #     assertionName:  "http://schemas.auth0.com/userType"
+    #     enabled: false  # If readonly is disabled, all users authorized on SAML will default to readonly
+    #     assertionName: ""
     #     assertionValues:
     #       - "readonly"
     #   - name: editor
-    #     enabled: true # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
-    #     assertionName: "http://schemas.auth0.com/userType"
+    #     enabled: true  # If editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #     assertionName: ""
     #     assertionValues:
     #       - "editor"
 
+## Kubecost OIDC (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-oidc
 oidc:
   enabled: false
-  clientID: ""  # application/client client_id parameter obtained from provider, used to make requests to server
-  clientSecret: ""  # application/client client_secret parameter obtained from provider, used to make requests to server
-  # secretName: "kubecost-oidc-secret" # k8s secret where clientsecret will be stored
-  # For use to provide a custom OIDC Secret. Overrides the usage of oidc.clientSecret and oidc.secretName.
-  # Should contain the field directly.
-  # Can be created using raw k8s secrets, external secrets, sealed secrets, or any other method.
+  clientID: ""  # Application client_id parameter obtained from provider. Used to make requests to server.
+  clientSecret: ""  # Application/client client_secret parameter obtained from provider. Used to make requests to server.
+  secretName: "kubecost-oidc-secret"  # K8s secret where clientsecret will be stored
   existingCustomSecret:
     enabled: false
-    name: ""  # name of the secret containing the client secret
-
-  # authURL: "https://my.auth.server/authorize" # endpoint for login to auth server
-  # loginRedirectURL: "http://my.kubecost.url/model/oidc/authorize" # Kubecost url configured in provider for redirect after authentication
-  # discoveryURL: "https://my.auth.server/.well-known/openid-configuration" # url for OIDC endpoint discovery
-  skipOnlineTokenValidation: false  # if true, will skip accessing OIDC introspection endpoint for online token verification, and instead try to locally validate JWT claims
-  useClientSecretPost: false  # if true, client secret will specifically only use client_secret_post method, otherwise it will attempt to send the secret in both the header and the body.
-  # hostedDomain: "example.com" # optional, blocks access to the auth domain specified in the hd claim of the provider ID token
+    name: ""  # Name of an existing clientSecret. Overrides the usage of oidc.clientSecret and oidc.secretName.
+  authURL: ""  # Authorization endpoint for your identity provider
+  loginRedirectURL: ""  # Kubecost URL endpoint which handles auth flow
+  discoveryURL: ""  # Your identity provider's endpoint sharing OIDC configuration
+  skipOnlineTokenValidation: false  # If true, validate JWT claims locally
+  useClientSecretPost: false  # If true, only use client_secret_post method. Otherwise attempt to send the secret in both the header and the body.
+  hostedDomain: ""  # Optional, blocks access to the auth domain specified in the hd claim of the provider ID token
   rbac:
     enabled: false
     # groups:
-    #   - name: admin
-    #     enabled: false # if admin is disabled, all authenticated users will be able to make configuration changes to the kubecost frontend
-    #     claimName: "roles" # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
-    #     claimValues: # Kubecost matches these strings with the roles created in your identity provider
+    #   - name: admin  # Admins have permissions to edit Kubecost settings and save reports
+    #     enabled: false
+    #     claimName: "roles"  # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
+    #     claimValues:  # Kubecost matches these strings with the roles created in your identity provider
     #       - "admin"
     #       - "superusers"
-    #   - name: readonly
-    #     enabled: false # if readonly is disabled, all authenticated users will default to readonly
-    #     claimName:  "roles"
+    #   - name: readonly  # Readonly users do not have permissions to edit Kubecost settings or save reports.
+    #     enabled: false
+    #     claimName: "roles"
     #     claimValues:
     #       - "readonly"
-    #   - name: editor
-    #     enabled: false # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #   - name: editor  # Editors have permissions to edit reports/alerts and act as readers otherwise
+    #     enabled: false
     #     claimName: "roles"
     #     claimValues:
     #       - "editor"
 
@@ -435,25 +442,14 @@
   resources:
     requests:
       cpu: "10m"
       memory: "55Mi"
-    # limits:
-    #   cpu: "100m"
-    #   memory: "256Mi"
   deploymentStrategy: {}
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
-
-  # Define a readiness probe for the Kubecost frontend container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
     failureThreshold: 6
-
-  # Define a liveness probe for the Kubecost frontend container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
@@ -495,49 +491,8 @@
   # emitNamespaceAnnotations: false
   # emitKsmV1Metrics: true # emit all KSM metrics in KSM v1.
   # emitKsmV1MetricsOnly: false # emit only the KSM metrics missing from KSM v2. Advanced users only.
 
-  # Optional
-  # The metrics exporter is a separate deployment and service (for prometheus scrape auto-discovery)
-  # which emits metrics cost-model relies on. Enabling this deployment also removes the KSM dependency
-  # from the cost-model. If the deployment is not enabled, the metrics will continue to be emitted from
-  # the cost-model.
-  exporter:
-    enabled: false
-    port: 9005
-    # Adds the default Prometheus scrape annotations to the metrics exporter service.
-    # Set to false and use service.annotations (below) to set custom scrape annotations.
-    prometheusScrape: true
-    resources: {}
-      # requests:
-      #  cpu: "200m"
-      #  memory: "55Mi"
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    tolerations: []
-
-    #  - key: "key"
-    #    operator: "Equal|Exists"
-    #    value: "value"
-    #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-    affinity: {}
-
-    service:
-      annotations: {}
-
-    # Service Monitor for Kubecost Metrics
-    serviceMonitor:  # the kubecost included prometheus uses scrapeConfigs and does not support service monitors. The following options assume an existing prometheus that supports serviceMonitors.
-      enabled: false
-      additionalLabels: {}
-      metricRelabelings: []
-      relabelings: []
-    ## PriorityClassName
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
-    priorityClassName: ""
-    additionalLabels: {}
-    nodeSelector: {}
-    extraArgs: []
-
 sigV4Proxy:
   image: public.ecr.aws/aws-observability/aws-sigv4-proxy:latest
   imagePullPolicy: IfNotPresent
   name: aps
@@ -549,9 +504,8 @@
   # - name: AWS_ACCESS_KEY_ID
   #   value: <access_key>
   # - name: AWS_SECRET_ACCESS_KEY
   #   value: <secret_key>
-  # Optional resource requests and limits for the sigV4proxy container.
   resources: {}
 
 kubecostModel:
   image: "gcr.io/kubecost1/cost-model"
@@ -559,17 +513,14 @@
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for cost-model.
   # fullImageName:
 
+  # Log level for the cost model container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
+  logLevel: info
+
   # securityContext:
   #   readOnlyRootFilesystem: true
 
-  # Build local cost allocation cache
-  warmCache: false
-  # Run allocation ETL pipelines
-  etl: true
-  # Enable the ETL filestore backing storage
-  etlFileStoreEnabled: true
   # The total number of days the ETL pipelines will build
   # Set to 0 to disable daily ETL (not recommended)
   etlDailyStoreDurationDays: 91
   # The total number of hours the ETL pipelines will build
@@ -695,16 +646,13 @@
     # limits:
     #   cpu: "800m"
     #   memory: "256Mi"
 
-  # Define a readiness probe for the Kubecost cost-model container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the Kubecost cost-model container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -712,43 +660,18 @@
   extraArgs: []
 
   # Optional. A list of extra environment variables to be added to the cost-model container.
   # extraEnv:
-  #   - name: LOG_LEVEL
-  #     value: trace
   #   - name: LOG_FORMAT
   #     value: json
   #   # When false, Kubecost will not show Asset costs for local disks physically
   #   # attached to nodes (e.g. ephemeral storage). This needs to be applied to
   #   # each cluster monitored.
   #   - name: ASSET_INCLUDE_LOCAL_DISK_COST
   #     value: "true"
 
-  # creates an ingress directly to the model container, for API access
-  ingress:
-    enabled: false
-    # className: nginx
-    labels:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    annotations:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    paths: ["/"]
-    pathType: ImplementationSpecific
-    hosts:
-      - cost-analyzer-model.local
-    tls: []
-    #  - secretName: cost-analyzer-model-tls
-    #    hosts:
-    #      - cost-analyzer-model.local
   utcOffset: "+00:00"
-  # Optional - add extra ports to the cost-model container. For kubecost development purposes only - not recommended for users.
   extraPorts: []
-    # - name: debug
-    #   port: 40000
-    #   targetPort: 40000
-    #   containerPort: 40000
 
 ## etlUtils is a utility typically used by Enterprise customers transitioning
 ## from v1 to v2 of Kubecost. It translates the data from the "/etl" dir of the
 ## bucket, to the "/federated" dir of the bucket.
@@ -760,8 +683,10 @@
   resources: {}
   env: {}
   nodeSelector: {}
   tolerations: []
+  ## Annotations to be added to etlutils deployment
+  annotations: {}
   affinity: {}
 
 # Basic Kubecost ingress, more examples available at https://docs.kubecost.com/install-and-configure/install/ingress-examples
 ingress:
@@ -782,77 +707,25 @@
   #    hosts:
   #      - cost-analyzer.local
 
 nodeSelector: {}
-
 tolerations: []
-#  - key: "key"
-#    operator: "Equal|Exists"
-#    value: "value"
-#    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
 affinity: {}
-
 topologySpreadConstraints: []
-
-# If true, creates a PriorityClass to be used by the cost-analyzer pod
 priority:
   enabled: false
-  name: ""  # Provide name of existing priority class only. If left blank, upstream chart will create one from default template.
-
-# If true, enable creation of NetworkPolicy resources.
-networkPolicy:
-  enabled: false
-  denyEgress: true  # create a network policy that denies egress from kubecost
-  sameNamespace: true  # Set to true if cost analyzer and prometheus are on the same namespace
-#  namespace: kubecost # Namespace where prometheus is installed
-
-  # Cost-analyzer specific vars using the new template
-  costAnalyzer:
-    enabled: false  # If true, create a network policy for cost-analyzer
-    annotations: {}  # annotations to be added to the network policy
-    additionalLabels: {}  # additional labels to be added to the network policy
-    # Examples rules:
-    # ingressRules:
-    #   - selectors: # allow ingress from self on all ports
-    #     - podSelector:
-    #         matchLabels:
-    #           app.kubernetes.io/name: cost-analyzer
-    #   - selectors: # allow egress access to prometheus
-    #     - namespaceSelector:
-    #         matchLabels:
-    #           name: prometheus
-    #       podSelector:
-    #         matchLabels:
-    #           app: prometheus
-    #     ports:
-    #       - protocol: TCP
-    #         port: 9090
-    # egressRules:
-    #   - selectors: # restrict egress to inside cluster
-    #     - namespaceSelector: {}
-
-## @param extraVolumes A list of volumes to be added to the pod
-##
+  name: ""
 extraVolumes: []
-## @param extraVolumeMounts A list of volume mounts to be added to the pod
-##
 extraVolumeMounts: []
 
 # Define persistence volume for cost-analyzer, more information at https://docs.kubecost.com/install-and-configure/install/storage
 persistentVolume:
   size: 32Gi
-  dbSize: 32.0Gi
   enabled: true  # Note that setting this to false means configurations will be wiped out on pod restart.
   # storageClass: "-" #
   # existingClaim: kubecost-cost-analyzer # a claim in the same namespace as kubecost
   labels: {}
   annotations: {}
-    # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-  # Enables a separate PV specifically for ETL data. This should be avoided, but
-  # is kept for legacy compatibility.
-  dbPVEnabled: false
 
 service:
   type: ClusterIP
   port: 9090
@@ -873,20 +746,15 @@
 
   rbac:
     create: true  # Create the RBAC resources for Prometheus.
 
-  ## Define serviceAccount names for components. Defaults to component's fully qualified name.
-  ##
   serviceAccounts:
     alertmanager:
       create: true
       name:
     nodeExporter:
       create: true
       name:
-    pushgateway:
-      create: true
-      name:
     server:
       create: true
       name:
       ## Prometheus server ServiceAccount annotations.
@@ -897,9 +765,8 @@
   ##
   # selfsignedCertConfigMapName: ""
 
   imagePullSecrets:
-  # - name: "image-pull-secret"
 
   extraScrapeConfigs: |
     - job_name: kubecost
       honor_labels: true
@@ -939,9 +806,9 @@
         {{- end }}
     ## Enables scraping of NVIDIA GPU metrics via dcgm-exporter. Scrapes all
     ## endpoints which contain "dcgm-exporter" in labels "app",
     ## "app.kubernetes.io/component", or "app.kubernetes.io/name" with a case
-    ## insensitive match.
+    ## insensitive match. The label must be present on the K8s service endpoints and not just pods.
     ## Refs:
     ## https://github.com/NVIDIA/gpu-operator/blob/d4316a415bbd684ce8416a88042305fc1a093aa4/assets/state-dcgm-exporter/0600_service.yaml#L7
     ## https://github.com/NVIDIA/dcgm-exporter/blob/54fd1ca137c66511a87a720390613680b9bdabdd/deployment/templates/service.yaml#L23
     - job_name: kubecost-dcgm-exporter
@@ -961,381 +828,122 @@
 
     ## Provide a full name override for the Prometheus server.
     # fullnameOverride: ""
 
-    ## Prometheus server container name
-    ##
     enabled: true
     name: server
     sidecarContainers:
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## Prometheus server container image
-    ##
     image:
       repository: quay.io/prometheus/prometheus
       tag: v2.55.1
       pullPolicy: IfNotPresent
-
-    ## prometheus server priorityClassName
-    ##
     priorityClassName: ""
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
-    ## Maybe same with Ingress host name
     baseURL: ""
-
-    ## Additional server container environment variables
-    ##
-    ## You specify this manually like you would a raw deployment manifest.
-    ## This means you can bind in environment variables from secrets.
-    ##
-    ## e.g. static environment variable:
-    ##  - name: DEMO_GREETING
-    ##    value: "Hello from the environment"
-    ##
-    ## e.g. secret environment variable:
-    ## - name: USERNAME
-    ##   valueFrom:
-    ##     secretKeyRef:
-    ##       name: mysecret
-    ##       key: username
     env: []
-
     extraFlags:
       - web.enable-lifecycle
-      ## web.enable-admin-api flag controls access to the administrative HTTP API which includes functionality such as
-      ## deleting time series. This is disabled by default.
-      # - web.enable-admin-api
-      ##
-      ## storage.tsdb.no-lockfile flag controls BD locking
-      # - storage.tsdb.no-lockfile
-      ##
-      ## storage.tsdb.wal-compression flag enables compression of the write-ahead log (WAL)
-      # - storage.tsdb.wal-compression
-
-    ## Path to a configuration file on prometheus server container FS
     configPath: /etc/config/prometheus.yml
-
     global:
-      ## How frequently to scrape targets by default
-      ##
       scrape_interval: 1m
-      ## How long until a scrape request times out
-      ##
       scrape_timeout: 60s
-      ## How frequently to evaluate rules
-      ##
       evaluation_interval: 1m
       external_labels:
         cluster_id: cluster-one  # Each cluster should have a unique ID
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
-    ##
     remoteWrite: {}
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read
-    ##
     remoteRead: {}
-
-    ## Additional Prometheus server container arguments
-    ##
     extraArgs:
       query.max-concurrency: 1
       query.max-samples: 100000000
-
-    ## Additional InitContainers to initialize the pod
-    ##
     extraInitContainers: []
-
-    ## Additional Prometheus server Volume mounts
-    ##
     extraVolumeMounts: []
-
-    ## Additional Prometheus server Volumes
-    ##
     extraVolumes: []
-
-    ## Additional Prometheus server hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: certs-dir
-      #   mountPath: /etc/kubernetes/certs
-      #   subPath: ""
-      #   hostPath: /etc/kubernetes/certs
-      #   readOnly: true
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   subPath: ""
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Additional Prometheus server Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: prom-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.server.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/server-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
     ingress:
-      ## If true, Prometheus server Ingress will be created
-      ##
       enabled: false
       # className: nginx
-
-      ## Prometheus server Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## Prometheus server Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## Prometheus server Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - prometheus.domain.com
-      #   - domain.com/prometheus
-
-      ## PathType determines the interpretation of the Path matching
       pathType: "Prefix"
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## Prometheus server Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-server-tls
-      #     hosts:
-      #       - prometheus.domain.com
-
-    ## Server Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for Prometheus server pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, Prometheus server will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## Prometheus server data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## Prometheus server data Persistent Volume annotations
-      ##
       annotations: {}
-        # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-      ## Prometheus server data Persistent Volume existing claim name
-      ## Requires server.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## Prometheus server data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## Prometheus server data Persistent Volume size
-      ##
       size: 32Gi
-
-      ## Prometheus server data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## Prometheus server data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of Prometheus server data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
     emptyDir:
       sizeLimit: ""
-
-    ## Annotations to be added to Prometheus server pods
-    ##
     podAnnotations: {}
-      # iam.amazonaws.com/role: prometheus
-
-    ## Annotations to be added to the Prometheus Server deployment
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to Prometheus server pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Prometheus AlertManager configuration
-    ##
     alertmanagers: []
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
       annotations: {}
       labels: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
         servicePort: 80
-
-    ## Prometheus server readiness and liveness probe initial delay and timeout
-    ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
-    ##
     readinessProbeInitialDelay: 5
     readinessProbeTimeout: 3
     readinessProbeFailureThreshold: 3
     readinessProbeSuccessThreshold: 1
     livenessProbeInitialDelay: 5
     livenessProbeTimeout: 3
     livenessProbeFailureThreshold: 3
     livenessProbeSuccessThreshold: 1
-
-    ## Prometheus server resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 500m
-      #   memory: 512Mi
-      # requests:
-      #   cpu: 500m
-      #   memory: 512Mi
-
-    ## Vertical Pod Autoscaler config
-    ## Ref: https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
     verticalAutoscaler:
-      ## If true a VPA object will be created for the controller (either StatefulSet or Deployment, based on above configs)
       enabled: false
       ## Optional. Defaults to "Auto" if not specified.
       # updateMode: "Auto"
       ## Mandatory. Without, VPA will not be created.
       # containerPolicies:
       # - containerName: 'prometheus-server'
-
-    ## Security context to be added to server pods
-    ##
     securityContext: {}
-      # runAsUser: 1001
-      # runAsNonRoot: true
-      # runAsGroup: 1001
-      # fsGroup: 1001
-
     containerSecurityContext: {}
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-      # nodePort: ""
-
-      ## List of IP addresses at which the Prometheus server service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       sessionAffinity: None
       type: ClusterIP
-
-      ## Enable gRPC port on service to allow auto discovery with thanos-querier
       gRPC:
         enabled: false
         servicePort: 10901
-        # nodePort: 10901
-
-      ## If using a statefulSet (statefulSet.enabled=true), configure the
-      ## service to connect to a specific replica to have a consistent view
-      ## of the data.
       statefulsetReplica:
         enabled: false
         replica: 0
-
-    ## Prometheus server pod termination grace period
-    ##
     terminationGracePeriodSeconds: 300
 
     ## Prometheus data retention period (default if not specified is 97 hours)
     ##
@@ -1366,292 +974,92 @@
     # retentionSize: should be significantly greater than the storage used in the number of hours set in etlHourlyStoreDurationHours
 
   # Install Prometheus Alert Manager
   alertmanager:
-    ## If false, alertmanager will not be installed
-    ##
     enabled: false
-
     ## Provide a full name override for Prometheus alertmanager.
     # fullnameOverride: ""
-
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## alertmanager container name
-    ##
     name: alertmanager
-
-    ## alertmanager container image
-    ##
     image:
       repository: quay.io/prometheus/alertmanager
       tag: v0.27.0
       pullPolicy: IfNotPresent
-
-    ## alertmanager priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Additional alertmanager container arguments
-    ##
     extraArgs: {}
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
     baseURL: "http://localhost:9093"
-
-    ## Additional alertmanager container environment variable
-    ## For instance to add a http_proxy
-    ##
     extraEnv: {}
-
-    ## Additional alertmanager Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: alertmanager-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.alertmanager.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
-    ## The name of a secret in the same kubernetes namespace which contains the Alertmanager config
-    ## Defining configFromSecret will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configFromSecret: ""
-
-    ## The configuration file name to be loaded to alertmanager
-    ## Must match the key within configuration loaded from ConfigMap/Secret
-    ##
     configFileName: alertmanager.yml
-
     ingress:
-      ## If true, alertmanager Ingress will be created
-      ##
       enabled: false
-
-      ## alertmanager Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## alertmanager Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## alertmanager Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - alertmanager.domain.com
-      #   - domain.com/alertmanager
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## alertmanager Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - alertmanager.domain.com
-
-    ## Alertmanager Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for alertmanager scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for alertmanager pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, alertmanager will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## alertmanager data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## alertmanager data Persistent Volume Claim annotations
-      ##
       annotations: {}
-
-      ## alertmanager data Persistent Volume existing claim name
-      ## Requires alertmanager.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## alertmanager data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## alertmanager data Persistent Volume size
-      ##
       size: 2Gi
-
-      ## alertmanager data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## alertmanager data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of alertmanager data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
-    ## Annotations to be added to alertmanager pods
-    ##
     podAnnotations: {}
-      ## Tell prometheus to use a specific set of alertmanager pods
-      ## instead of all alertmanager pods found in the same namespace
-      ## Useful if you deploy multiple releases within the same namespace
-      ##
-      ## prometheus.io/probe: alertmanager-teamA
-
-    ## Labels to be added to Prometheus AlertManager pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
+      annotations: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
-
-        ## Enabling peer mesh service end points for enabling the HA alert manager
-        ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
         # enableMeshPeer : true
-
         servicePort: 80
-
-    ## alertmanager resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to alertmanager pods
-    ##
     securityContext:
       runAsUser: 1001
       runAsNonRoot: true
       runAsGroup: 1001
       fsGroup: 1001
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-
-      ## Enabling peer mesh service end points for enabling the HA alert manager
-      ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
       # enableMeshPeer : true
-
-      ## List of IP addresses at which the alertmanager service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       # nodePort: 30000
       sessionAffinity: None
       type: ClusterIP
 
-    # Define a custom scheduler for Alertmanager pods
-    # schedulerName: default-scheduler
-
-  ## alertmanager ConfigMap entries
-  ##
   alertmanagerFiles:
     alertmanager.yml:
       global: {}
-        # slack_api_url: ''
-
       receivers:
         - name: default-receiver
-          # slack_configs:
-          #  - channel: '@you'
-          #    send_resolved: true
-
       route:
         group_wait: 10s
         group_interval: 5m
         receiver: default-receiver
@@ -1659,87 +1067,32 @@
 
   ## Monitors ConfigMap changes and POSTs to a URL
   configmapReload:
     prometheus:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
-
-      ## configmap-reload container securityContext
       containerSecurityContext: {}
 
     alertmanager:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
 
-  # node-export must be disabled if there is an existing daemonset: https://guide.kubecost.com/hc/en-us/articles/4407601830679-Troubleshoot-Install#a-name-node-exporter-a-issue-failedscheduling-kubecost-prometheus-node-exporter
   nodeExporter:
     ## If false, node-exporter will not be installed.
     ## This is disabled by default in Kubecost 2.0, though it can be enabled as needed.
     ##
@@ -1747,346 +1100,59 @@
 
     ## Provide a full name override for node exporter.
     # fullnameOverride: ""
 
-    ## If true, node-exporter pods share the host network namespace
-    ##
     hostNetwork: true
-
-    ## If true, node-exporter pods share the host PID namespace
-    ##
     hostPID: true
-
-    ## node-exporter dns policy
-    ##
     dnsPolicy: ClusterFirstWithHostNet
-
-    ## node-exporter container name
-    ##
     name: node-exporter
-
-    ## node-exporter container image
-    ##
     image:
       repository: prom/node-exporter
       tag: v1.8.2
       pullPolicy: IfNotPresent
-
-    ## node-exporter priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Custom Update Strategy
-    ##
     updateStrategy:
       type: RollingUpdate
-
-    ## Additional node-exporter container arguments
-    ##
     extraArgs: {}
-
-    ## Additional node-exporter hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: textfile-dir
-      #   mountPath: /srv/txt_collector
-      #   hostPath: /var/lib/node-exporter
-      #   readOnly: true
-      #   mountPropagation: HostToContainer
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Set a custom affinity for node-exporter
-    ##
     # affinity:
-
-    ## Node tolerations for node-exporter scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for node-exporter pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Annotations to be added to node-exporter pods
-    ##
     podAnnotations: {}
-
-    ## Annotations to be added to the node-exporter DaemonSet
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to node-exporter pods
-    ##
+    annotations: {}
     pod:
       labels: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## node-exporter resource limits & requests
-    ## Ref: https://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 200m
-      #   memory: 50Mi
-      # requests:
-      #   cpu: 100m
-      #   memory: 30Mi
-
-    ## Security context to be added to node-exporter pods
-    ##
     securityContext: {}
-      # runAsUser: 0
-
     service:
       annotations:
         prometheus.io/scrape: "true"
       labels: {}
-
-      # Exposed as a headless service:
-      # https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
       clusterIP: None
-
-      ## List of IP addresses at which the node-exporter service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       hostPort: 9100
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 9100
       type: ClusterIP
 
-  # Install Prometheus Push Gateway.
-  pushgateway:
-    ## If false, pushgateway will not be installed
-    ##
-    enabled: false
-
-    ## Provide a full name override for Prometheus push gateway.
-    # fullnameOverride: ""
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
-    # schedulerName:
-
-    ## pushgateway container name
-    ##
-    name: pushgateway
-
-    ## pushgateway container image
-    ##
-    image:
-      repository: prom/pushgateway
-      tag: v1.9.0
-      pullPolicy: IfNotPresent
-
-    ## pushgateway priorityClassName
-    ##
-    priorityClassName: ""
-
-    ## Additional pushgateway container arguments
-    ##
-    ## for example: persistence.file: /data/pushgateway.data
-    extraArgs: {}
-
-    ingress:
-      ## If true, pushgateway Ingress will be created
-      ##
-      enabled: false
-
-      ## pushgateway Ingress annotations
-      ##
-      annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## pushgateway Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
-      hosts: []
-      #   - pushgateway.domain.com
-      #   - domain.com/pushgateway
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
-      extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## pushgateway Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
-      tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - pushgateway.domain.com
-
-    ## Node tolerations for pushgateway scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
-    tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for pushgateway pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
-    nodeSelector: {}
-
-    ## Annotations to be added to pushgateway pods
-    ##
-    podAnnotations: {}
-
-    replicaCount: 1
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
-    podDisruptionBudget:
-      enabled: false
-      maxUnavailable: 1
-
-    ## pushgateway resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
-    resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to push-gateway pods
-    ##
-    securityContext:
-      runAsUser: 1001
-      runAsNonRoot: true
-
-    service:
-      annotations:
-        prometheus.io/probe: pushgateway
-      labels: {}
-      clusterIP: ""
-
-      ## List of IP addresses at which the pushgateway service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
-      externalIPs: []
-
-      loadBalancerIP: ""
-      loadBalancerSourceRanges: []
-      servicePort: 9091
-      type: ClusterIP
-
-    strategy:
-      type: Recreate
-      rollingUpdate: null
-
-
-    persistentVolume:
-      ## If true, pushgateway will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
-      enabled: true
-
-      ## pushgateway data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
-      accessModes:
-        - ReadWriteOnce
-
-      ## pushgateway data Persistent Volume Claim annotations
-      ##
-      annotations: {}
-
-      ## pushgateway data Persistent Volume existing claim name
-      ## Requires pushgateway.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
-      existingClaim: ""
-
-      ## pushgateway data Persistent Volume mount root path
-      ##
-      mountPath: /data
-
-      ## pushgateway data Persistent Volume size
-      ##
-      size: 2Gi
-
-      ## pushgateway data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
-      # storageClass: "-"
-
-      ## pushgateway data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
-      # volumeBindingMode: ""
-
-      ## Subdirectory of pushgateway data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
-      subPath: ""
-
   serverFiles:
     ## Alerts configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
     alerting_rules.yml: {}
-    # groups:
-    #   - name: Instances
-    #     rules:
-    #       - alert: InstanceDown
-    #         expr: up == 0
-    #         for: 5m
-    #         labels:
-    #           severity: page
-    #         annotations:
-    #           description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
-    #           summary: 'Instance {{ $labels.instance }} down'
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use alerting_rules.yml
-    alerts: {}
 
     ## Records configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/
     recording_rules.yml: {}
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use recording_rules.yml
 
     prometheus.yml:
       rule_files:
         - /etc/config/recording_rules.yml
         - /etc/config/alerting_rules.yml
-      ## Below two files are DEPRECATED will be removed from this default values file
-        - /etc/config/rules
-        - /etc/config/alerts
 
       scrape_configs:
         - job_name: prometheus
           static_configs:
@@ -2098,9 +1164,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes-cadvisor'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2159,9 +1224,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2252,21 +1316,8 @@
           metric_relabel_configs:
             - source_labels: [__name__]
               regex: (container_cpu_allocation|container_cpu_usage_seconds_total|container_fs_limit_bytes|container_fs_writes_bytes_total|container_gpu_allocation|container_memory_allocation_bytes|container_memory_usage_bytes|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|DCGM_FI_DEV_GPU_UTIL|deployment_match_labels|kube_daemonset_status_desired_number_scheduled|kube_daemonset_status_number_ready|kube_deployment_spec_replicas|kube_deployment_status_replicas|kube_deployment_status_replicas_available|kube_job_status_failed|kube_namespace_annotations|kube_namespace_labels|kube_node_info|kube_node_labels|kube_node_status_allocatable|kube_node_status_allocatable_cpu_cores|kube_node_status_allocatable_memory_bytes|kube_node_status_capacity|kube_node_status_capacity_cpu_cores|kube_node_status_capacity_memory_bytes|kube_node_status_condition|kube_persistentvolume_capacity_bytes|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_limits_cpu_cores|kube_pod_container_resource_limits_memory_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_requests_cpu_cores|kube_pod_container_resource_requests_memory_bytes|kube_pod_container_status_restarts_total|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_labels|kube_pod_owner|kube_pod_status_phase|kube_replicaset_owner|kube_statefulset_replicas|kube_statefulset_status_replicas|kubecost_cluster_info|kubecost_cluster_management_cost|kubecost_cluster_memory_working_set_bytes|kubecost_load_balancer_cost|kubecost_network_internet_egress_cost|kubecost_network_region_egress_cost|kubecost_network_zone_egress_cost|kubecost_node_is_spot|kubecost_pod_network_egress_bytes_total|node_cpu_hourly_cost|node_cpu_seconds_total|node_disk_reads_completed|node_disk_reads_completed_total|node_disk_writes_completed|node_disk_writes_completed_total|node_filesystem_device_error|node_gpu_count|node_gpu_hourly_cost|node_memory_Buffers_bytes|node_memory_Cached_bytes|node_memory_MemAvailable_bytes|node_memory_MemFree_bytes|node_memory_MemTotal_bytes|node_network_transmit_bytes_total|node_ram_hourly_cost|node_total_hourly_cost|pod_pvc_allocation|pv_hourly_cost|service_selector_labels|statefulSet_match_labels|kubecost_pv_info|up)
               action: keep
-
-
-  #  prometheus.yml: # Sample block -- enable if using an in cluster durable store.
-  #      remote_write:
-  #        - url: "http://pgprometheus-adapter:9201/write"
-  #          write_relabel_configs:
-  #            - source_labels: [__name__]
-  #              regex: 'container_.*_allocation|container_.*_allocation_bytes|.*_hourly_cost|kube_pod_container_resource_requests{resource="memory", unit="byte"}|container_memory_working_set_bytes|kube_pod_container_resource_requests{resource="cpu", unit="core"}|kube_pod_container_resource_requests|pod_pvc_allocation|kube_namespace_labels|kube_pod_labels'
-  #              action: keep
-  #          queue_config:
-  #            max_samples_per_send: 1000
-        # remote_read:
-        #  - url: "http://pgprometheus-adapter:9201/read"
     rules:
       groups:
         - name: CPU
           rules:
@@ -2307,13 +1358,10 @@
     #   regex: (.+)\d+
     #   target_label: dc
 
   networkPolicy:
-    ## Enable creation of NetworkPolicy resources.
-    ##
     enabled: false
 
-
 ## Optional daemonset to more accurately attribute network costs to the correct workload
 ## https://docs.kubecost.com/install-and-configure/advanced-configuration/network-costs-configuration
 networkCosts:
   enabled: false
@@ -2332,14 +1380,15 @@
   # Traffic Logging will enable logging the top 5 destinations for each source
   # every 30 minutes.
   trafficLogging: true
 
+  # Log level for the network cost containers. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # Port will set both the containerPort and hostPort to this value.
   # These must be identical due to network-costs being run on hostNetwork
   port: 3001
-  # this daemonset can use significant resources on large clusters: https://guide.kubecost.com/hc/en-us/articles/4407595973527-Network-Traffic-Cost-Allocation
+  # this daemonset can use significant resources on large clusters: https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui/cost-allocation/network-allocation
   resources:
     limits:  # remove the limits by setting cpu: null
       cpu: 500m  # can be less, will depend on cluster size
       # memory: it is not recommended to set a memory limit
@@ -2410,75 +1459,41 @@
       #    ips:
       #      - "15.128.15.2"
       #      - "20.0.0.0/8"
 
-  ## Node tolerations for server scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
   tolerations: []
-  #  - key: "key"
-  #    operator: "Equal|Exists"
-  #    value: "value"
-  #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
   affinity: {}
-
   service:
     annotations: {}
     labels: {}
-
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  ## PodMonitor
-  ## Allows scraping of network metrics from a dedicated prometheus operator setup
   podMonitor:
     enabled: false
     additionalLabels: {}
-  # match the default extraScrapeConfig
   additionalLabels: {}
   nodeSelector: {}
+  # Annotations to be added to network cost daemonset template and pod template annotations
   annotations: {}
   healthCheckProbes: {}
-    # readinessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
-    # livenessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
   additionalSecurityContext: {}
-    # readOnlyRootFilesystem: true
 
 ## Kubecost Deployment Configuration
 ## Used for HA mode in Business & Enterprise tier
 ##
 kubecostDeployment:
   replicas: 1
-  # deploymentStrategy:
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
   labels: {}
   annotations: {}
 
-
 ## Kubecost Forecasting forecasts future cost patterns based on historical
 ## patterns observed by Kubecost.
 forecasting:
   enabled: true
 
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for the forecasting
   # container.
-  # Example: fullImageName: gcr.io/kubecost1/forecasting:v0.0.1
-  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.18
   imagePullPolicy: IfNotPresent
 
   # Resource specification block for the forecasting container.
   resources:
@@ -2494,30 +1509,20 @@
     # -t is the worker timeout which primarily affects model training time;
     # if it is not high enough, training workers may die mid training
     "GUNICORN_CMD_ARGS": "--log-level info -t 1200"
 
-  # Define a priority class for the forecasting Deployment.
   priority:
     enabled: false
     name: ""
-
-  # Define a nodeSelector for the forecasting Deployment.
   nodeSelector: {}
-
-  # Define tolerations for the forecasting Deployment.
   tolerations: []
-
-  # Define Pod affinity for the forecasting Deployment.
+  annotations: {}
   affinity: {}
-
-  # Define a readiness probe for the forecasting container
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the forecasting container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -2545,8 +1550,9 @@
   # Replicas sets the number of Aggregator replicas. It only has an effect if
   # `deployMethod: "statefulset"`
   replicas: 1
 
+  # Log level for the aggregator container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # stagingEmptyDirSizeLimit changes how large the "staging"
   # /var/configs/waterfowl emptyDir is. It only takes effect in StatefulSet
@@ -2673,8 +1679,11 @@
 
   ## Define tolerations for the aggregator pod
   # tolerations: []
 
+  ## Annotations to be added for aggregator deployment or statefulset
+  # annotations: {}
+
   ## Define Pod affinity for the aggregator pod
   # affinity: {}
 
   ## Define extra volumes for the aggregator pod
@@ -2737,9 +1746,8 @@
   jaeger:
     enabled: false
     image: jaegertracing/all-in-one
     imageVersion: latest
-    # containerSecurityContext:
 
   service:
     labels: {}
 
@@ -2785,8 +1793,10 @@
     securityContext: {}
     containerSecurityContext: {}
     nodeSelector: {}
     tolerations: []
+    ## Annotations to be added for diagnostics Deployment.
+    annotations: {}
     affinity: {}
 
 ## Provide a full name override for the diagnostics Deployment.
 # diagnosticsFullnameOverride: ""
@@ -2797,14 +1807,16 @@
   image:
     repository: gcr.io/kubecost1/cluster-controller
     tag: v0.16.9
   imagePullPolicy: IfNotPresent
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Set custom tolerations for the cluster controller.
   tolerations: []
+
+  ## Annotations to be added for cluster controller template
+  annotations: {}
   resources: {}
+  affinity: {}
+  nodeSelector: {}
   actionConfigs:
     # this configures the Kubecost Cluster Turndown action
     # for more details, see documentation at https://github.com/kubecost/cluster-turndown/tree/develop?tab=readme-ov-file#setting-a-turndown-schedule
     clusterTurndown: []
@@ -2950,12 +1962,12 @@
 # initChownDataImage ensures all Kubecost filepath permissions on PV or local storage are set up correctly.
 initChownDataImage: "busybox"  # Supports a fully qualified Docker image, e.g. registry.hub.docker.com/library/busybox:latest
 initChownData:
   resources: {}
-    # requests:
-    #   cpu: "50m"
-    #   memory: "20Mi"
 
+## Kubecost's Bundled Grafana
+## You can access it by visiting http://kubecost.me.com/grafana/
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/custom-grafana
 grafana:
   # namespace_datasources: kubecost # override the default namespace here
   # namespace_dashboards: kubecost # override the default namespace here
   rbac:
@@ -2987,106 +1999,45 @@
   #           prometheusType: Prometheus
   #           prometheusVersion: 2.35.0
   #           timeInterval: 1m
 
-  ## Number of replicas for the Grafana deployment
   replicas: 1
-
-  ## Deployment strategy for the Grafana deployment
   deploymentStrategy: RollingUpdate
-
-  ## Readiness probe for the Grafana deployment
   readinessProbe:
     httpGet:
       path: /api/health
       port: 3000
-
-  ## Liveness probe for the Grafana deployment
   livenessProbe:
     httpGet:
       path: /api/health
       port: 3000
     initialDelaySeconds: 60
     timeoutSeconds: 30
     failureThreshold: 10
-
-  ## Container image settings for the Grafana deployment
   image:
     repository: grafana/grafana
     tag: 11.3.1
     pullPolicy: IfNotPresent
-
-    ## Optionally specify an array of imagePullSecrets.
-    ## Secrets must be manually created in the namespace.
     # pullSecrets:
-    #   - myRegistrKeySecretName
-
-  ## Pod-level security context for the Grafana deployment. Recommended let global defaults take effect.
   securityContext: {}
-    # runAsUser: 472
-    # fsGroup: 472
-
-  ## PriorityClassName for the Grafana deployment
   priorityClassName: ""
 
   ## Container image settings for Grafana initContainer used to download dashboards. Will only be used when dashboards are present.
   downloadDashboardsImage:
     repository: curlimages/curl
     tag: latest
     pullPolicy: IfNotPresent
-
-  ## Pod Annotations for the Grafana deployment
   podAnnotations: {}
-
-  ## Deployment annotations for the Grafana deployment
   annotations: {}
-
-  ## Expose the Grafana service to be accessed from outside the cluster (LoadBalancer service).
-  ## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
   service:
     type: ClusterIP
     port: 80
     annotations: {}
     labels: {}
-
-  ##  This template is not needed and is not supported.
-  ##  It is here for backwards compatibility.
-  ##  Kubecost exposes grafana by default with the
-  ##  top level ingress template under /grafana/
-  ingress:
-    enabled: false
-    annotations: {}
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    labels: {}
-    path: /
-    pathType: Prefix
-    hosts:
-      - chart-example.local
-    tls: []
-    #  - secretName: chart-example-tls
-    #    hosts:
-    #      - chart-example.local
-
-  ## Resource requests and limits for the Grafana deployment
   resources: {}
-  #  limits:
-  #    cpu: 100m
-  #    memory: 128Mi
-  #  requests:
-  #    cpu: 100m
-  #    memory: 128Mi
-
-  ## Node labels for pod assignment of the Grafana deployment
   nodeSelector: {}
-
-  ## Tolerations for pod assignment of the Grafana deployment
   tolerations: []
-
-  ## Affinity for pod assignment of the Grafana deployment
   affinity: {}
-
-  ## Enable persistence using Persistent Volume Claims of the Grafana deployment
   persistence:
     enabled: false
     # storageClassName: default
     # accessModes:
@@ -3094,117 +2045,18 @@
     # size: 10Gi
     # annotations: {}
     # subPath: ""
     # existingClaim:
-
-  ## Admin user for Grafana
   adminUser: admin
-
-  ## Admin password for Grafana
   adminPassword: strongpassword
-
-  ## Use an alternate scheduler for the Grafana deployment
   # schedulerName:
-
-  ## Extra environment variables that will be passed onto Grafana deployment pods
   env: {}
-
-  ## The name of a secret for Grafana in the same Kubernetes namespace which contain values to be added to the environment
-  ## This can be useful for auth tokens, etc
   envFromSecret: ""
-
-  ## Additional Grafana server secret mounts
-  ## Defines additional mounts with secrets. Secrets must be manually created in the namespace.
   extraSecretMounts: []
-    # - name: secret-files
-    #   mountPath: /etc/secrets
-    #   secretName: grafana-secret-files
-    #   readOnly: true
-
-  ## List of Grafana plugins
   plugins: []
-    # - digrich-bubblechart-panel
-    # - grafana-clock-panel
-
-  ## Grafana dashboard providers
-  ## ref: http://docs.grafana.org/administration/provisioning/#dashboards
-  ##
-  ## `path` must be /var/lib/grafana/dashboards/<provider_name>
-  ##
   dashboardProviders: {}
-  #  dashboardproviders.yaml:
-  #    apiVersion: 1
-  #    providers:
-  #    - name: 'default'
-  #      orgId: 1
-  #     folder: ''
-  #      type: file
-  #      disableDeletion: false
-  #      editable: true
-  #      options:
-  #        path: /var/lib/grafana/dashboards/default
-
-  ## Configure Grafana dashboard to import
-  ## NOTE: To use dashboards you must also enable/configure dashboardProviders
-  ## ref: https://grafana.com/dashboards
-  ##
-  ## dashboards per provider, use provider name as key.
-  ##
   dashboards: {}
-  #  default:
-  #    prometheus-stats:
-  #      gnetId: 3662
-  #      revision: 2
-  #      datasource: Prometheus
-
-  ## Reference to external Grafana ConfigMap per provider. Use provider name as key and ConfiMap name as value.
-  ## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
-  ## ConfigMap data example:
-  ##
-  ## data:
-  ##   example-dashboard.json: |
-  ##     RAW_JSON
-  ##
   dashboardsConfigMaps: {}
-  #  default: ""
-
-  ## LDAP Authentication for Grafana can be enabled with the following values on grafana.ini
-  ## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
-    # auth.ldap:
-    #   enabled: true
-    #   allow_sign_up: true
-    #   config_file: /etc/grafana/ldap.toml
-
-  ## Grafana's LDAP configuration
-  ## Templated by the template in _helpers.tpl
-  ## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
-  ## ref: http://docs.grafana.org/installation/ldap/#configuration
-  ldap:
-    # `existingSecret` is a reference to an existing secret containing the ldap configuration
-    # for Grafana in a key `ldap-toml`.
-    existingSecret: ""
-    # `config` is the content of `ldap.toml` that will be stored in the created secret
-    config: ""
-    # config: |-
-    #   verbose_logging = true
-
-    #   [[servers]]
-    #   host = "my-ldap-server"
-    #   port = 636
-    #   use_ssl = true
-    #   start_tls = false
-    #   ssl_skip_verify = false
-    #   bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
-
-  ## Grafana's SMTP configuration
-  ## NOTE: To enable, grafana.ini must be configured with smtp.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#smtp
-  smtp:
-    # `existingSecret` is a reference to an existing secret containing the smtp configuration
-    # for Grafana in keys `user` and `password`.
-    existingSecret: ""
-
   ## Grafana sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
   ## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
   sidecar:
     image:
@@ -3226,9 +2078,8 @@
       enabled: false
       error_throttle_sleep: 0
       # label that the configmaps with datasources are marked with
       label: grafana_datasource
-
   ## Grafana's primary configuration
   ## NOTE: values in map will be converted to ini format
   ## ref: http://docs.grafana.org/installation/configuration/
   ##
@@ -3256,21 +2107,15 @@
 
 serviceAccount:
   create: true  # Set this to false if you're bringing your own service account.
   annotations: {}
-  # name: kc-test
 
 awsstore:
   useAwsStore: false
-  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest  # Name and version of the container image for AWSStore.
+  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest
   createServiceAccount: false
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Use a custom nodeSelector for AWSStore.
   nodeSelector: {}
-    # kubernetes.io/arch: amd64
-  ## Annotations for the AWSStore ServiceAccount.
   annotations: {}
 
 ## Federated ETL Architecture
 ## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/federated-etl
@@ -3331,9 +2176,9 @@
 #       address: http://cluster-a.kubecost.com:9090
 #       # Optional authentication credentials - only basic auth is currently supported.
 #       auth:
 #         type: basic
-#         # Secret name should be a secret formatted based on: https://github.com/kubecost/docs/blob/main/ingress-examples.md
+#         # Secret name should be a secret formatted based on: https://github.com/kubecost/poc-common-configurations/tree/main/ingress-examples
 #         secretName: cluster-a-auth
 #         # Or pass auth directly as base64 encoded user:pass
 #         data: YWRtaW46YWRtaW4=
 #         # Or user and pass directly
@@ -3369,10 +2214,10 @@
 #   gpuLabel: gpu
 #   gpuLabelValue: true
 #   alibabaServiceKeyName: ""
 #   alibabaServiceKeyPassword: ""
-#   awsServiceKeyName: ACCESSKEYID
-#   awsServiceKeyPassword:  fakepassword # Only use if your values.yaml are stored encrypted. Otherwise provide an existing secret via serviceKeySecretName
+#   awsServiceKeyName: ""
+#   awsServiceKeyPassword: ""
 #   awsSpotDataRegion: us-east-1
 #   awsSpotDataBucket: spot-data-feed-s3-bucket
 #   awsSpotDataPrefix: dev
 #   athenaProjectID: "530337586277" # The AWS AccountID where the Athena CUR is. Generally your masterpayer account
@@ -3551,4 +2396,8 @@
 #             host: kubecost.kubecost.svc.cluster.local
 #             port:
 #               number: 80
 
+# -- Optional override for the image used for the basic health test container
+# basicHealth:
+#   fullImageName: alpine/k8s:1.26.9
+

Copy link
Contributor

github-actions bot commented Dec 6, 2024

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-06 17:43:41.504486300 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-06 17:43:15.788168596 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 7760ff29110f1aefc999b34a78e81fb32523e969ea55220a065f31bfee83b9e6
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.0"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.0
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJlbmFibGVkIjp0cnVlLCJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInBhdGhUeXBlIjoiSW1wbGVtZW50YXRpb25TcGVjaWZpYyIsInBhdGhzIjpbIi8iXSwidGxzIjpbeyJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJsb2dMZXZlbCI6ImluZm8iLCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXRjT2Zmc2V0IjoiKzAwOjAwIn0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJzeC1jbnAtb3NzIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLiBUaGUgbGFiZWwgbXVzdCBiZSBwcmVzZW50IG9uIHRoZSBLOHMgc2VydmljZSBlbmRwb2ludHMgYW5kIG5vdCBqdXN0IHBvZHMuXG4jIyBSZWZzOlxuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9ncHUtb3BlcmF0b3IvYmxvYi9kNDMxNmE0MTViYmQ2ODRjZTg0MTZhODgwNDIzMDVmYzFhMDkzYWE0L2Fzc2V0cy9zdGF0ZS1kY2dtLWV4cG9ydGVyLzA2MDBfc2VydmljZS55YW1sI0w3XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2RjZ20tZXhwb3J0ZXIvYmxvYi81NGZkMWNhMTM3YzY2NTExYTg3YTcyMDM5MDYxMzY4MGI5YmRhYmRkL2RlcGxveW1lbnQvdGVtcGxhdGVzL3NlcnZpY2UueWFtbCNMMjNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWRjZ20tZXhwb3J0ZXJcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogZW5kcG9pbnRzXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwLCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fY29tcG9uZW50LCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICg/aSkoLipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLiopXG4iLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhZmZpbml0eSI6e30sImFsZXJ0bWFuYWdlcnMiOltdLCJhbm5vdGF0aW9ucyI6e30sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiXSwic2NyYXBlX2NvbmZpZ3MiOlt7ImpvYl9uYW1lIjoicHJvbWV0aGV1cyIsInN0YXRpY19jb25maWdzIjpbeyJ0YXJnZXRzIjpbImxvY2FsaG9zdDo5MDkwIl19XX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2Rlcy1jYWR2aXNvciIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfc3BlY19jcHVfc2hhcmVzfGNvbnRhaW5lcl9zcGVjX21lbW9yeV9saW1pdF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNhZHZpc29yX3ZlcnNpb25faW5mb3xrdWJlY29zdF9wdl9pbmZvKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJjb250YWluZXIiXSwidGFyZ2V0X2xhYmVsIjoiY29udGFpbmVyX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbInBvZCJdLCJ0YXJnZXRfbGFiZWwiOiJwb2RfbmFtZSJ9XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzL2NhZHZpc29yIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGt1YmVsZXRfdm9sdW1lX3N0YXRzX3VzZWRfYnl0ZXMpIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcyIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtc2VydmljZS1lbmRwb2ludHMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJlbmRwb2ludHMifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X2FsbG9jYXRpb258Y29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9ncHVfYWxsb2NhdGlvbnxjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXN8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8RENHTV9GSV9ERVZfR1BVX1VUSUx8ZGVwbG95bWVudF9tYXRjaF9sYWJlbHN8a3ViZV9kYWVtb25zZXRfc3RhdHVzX2Rlc2lyZWRfbnVtYmVyX3NjaGVkdWxlZHxrdWJlX2RhZW1vbnNldF9zdGF0dXNfbnVtYmVyX3JlYWR5fGt1YmVfZGVwbG95bWVudF9zcGVjX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc19hdmFpbGFibGV8a3ViZV9qb2Jfc3RhdHVzX2ZhaWxlZHxrdWJlX25hbWVzcGFjZV9hbm5vdGF0aW9uc3xrdWJlX25hbWVzcGFjZV9sYWJlbHN8a3ViZV9ub2RlX2luZm98a3ViZV9ub2RlX2xhYmVsc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHl8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jb25kaXRpb258a3ViZV9wZXJzaXN0ZW50dm9sdW1lX2NhcGFjaXR5X2J5dGVzfGt1YmVfcGVyc2lzdGVudHZvbHVtZV9zdGF0dXNfcGhhc2V8a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1faW5mb3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9yZXNvdXJjZV9yZXF1ZXN0c19zdG9yYWdlX2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9pbmZvfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Jlc3RhcnRzX3RvdGFsfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcnVubmluZ3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Rlcm1pbmF0ZWRfcmVhc29ufGt1YmVfcG9kX2xhYmVsc3xrdWJlX3BvZF9vd25lcnxrdWJlX3BvZF9zdGF0dXNfcGhhc2V8a3ViZV9yZXBsaWNhc2V0X293bmVyfGt1YmVfc3RhdGVmdWxzZXRfcmVwbGljYXN8a3ViZV9zdGF0ZWZ1bHNldF9zdGF0dXNfcmVwbGljYXN8a3ViZWNvc3RfY2x1c3Rlcl9pbmZvfGt1YmVjb3N0X2NsdXN0ZXJfbWFuYWdlbWVudF9jb3N0fGt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGt1YmVjb3N0X2xvYWRfYmFsYW5jZXJfY29zdHxrdWJlY29zdF9uZXR3b3JrX2ludGVybmV0X2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfcmVnaW9uX2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfem9uZV9lZ3Jlc3NfY29zdHxrdWJlY29zdF9ub2RlX2lzX3Nwb3R8a3ViZWNvc3RfcG9kX25ldHdvcmtfZWdyZXNzX2J5dGVzX3RvdGFsfG5vZGVfY3B1X2hvdXJseV9jb3N0fG5vZGVfY3B1X3NlY29uZHNfdG90YWx8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkX3RvdGFsfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkX3RvdGFsfG5vZGVfZmlsZXN5c3RlbV9kZXZpY2VfZXJyb3J8bm9kZV9ncHVfY291bnR8bm9kZV9ncHVfaG91cmx5X2Nvc3R8bm9kZV9tZW1vcnlfQnVmZmVyc19ieXRlc3xub2RlX21lbW9yeV9DYWNoZWRfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtQXZhaWxhYmxlX2J5dGVzfG5vZGVfbWVtb3J5X01lbUZyZWVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtVG90YWxfYnl0ZXN8bm9kZV9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfG5vZGVfcmFtX2hvdXJseV9jb3N0fG5vZGVfdG90YWxfaG91cmx5X2Nvc3R8cG9kX3B2Y19hbGxvY2F0aW9ufHB2X2hvdXJseV9jb3N0fHNlcnZpY2Vfc2VsZWN0b3JfbGFiZWxzfHN0YXRlZnVsU2V0X21hdGNoX2xhYmVsc3xrdWJlY29zdF9wdl9pbmZvfHVwKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6dHJ1ZSwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY3JhcGUiXX0seyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoLipub2RlLWV4cG9ydGVyfGt1YmVjb3N0LW5ldHdvcmstY29zdHMpIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19lbmRwb2ludHNfbmFtZSJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihodHRwcz8pIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY2hlbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19zY2hlbWVfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcGF0aCJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoW146XSspKD86OlxcZCspPzsoXFxkKykiLCJyZXBsYWNlbWVudCI6IiQxOiQyIiwic291cmNlX2xhYmVscyI6WyJfX2FkZHJlc3NfXyIsIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BvcnQiXSwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2xhYmVsXyguKykifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25hbWVzcGFjZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWVzcGFjZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfcG9kX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25vZGUifV19XX0sInJlY29yZGluZ19ydWxlcy55bWwiOnt9LCJydWxlcyI6eyJncm91cHMiOlt7Im5hbWUiOiJDUFUiLCJydWxlcyI6W3siZXhwciI6InN1bShyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkpIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2U6cmF0ZTVtIn0seyJleHByIjoicmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2Vfbm9zdW06cmF0ZTVtIn0seyJleHByIjoiYXZnKGlyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiUE9EXCIsIGNvbnRhaW5lciE9XCJcIn1bNW1dKSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9jcHVfdXNhZ2VfaXJhdGUifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9XX0seyJuYW1lIjoiU2F2aW5ncyIsInJ1bGVzIjpbeyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifV19XX19LCJzZXJ2aWNlQWNjb3VudHMiOnsiYWxlcnRtYW5hZ2VyIjp7ImNyZWF0ZSI6dHJ1ZX0sIm5vZGVFeHBvcnRlciI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9fX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.0
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.0
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.0
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-06 17:43:41.504486300 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.0";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.0",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-06 17:43:15.788168596 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-06 17:43:41.504486300 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-06 17:43:41.504486300 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-06 17:43:41.504486300 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-06 17:43:41.504486300 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-06 17:43:41.504486300 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-06 17:43:15.784168541 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-06 17:43:15.788168596 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-06 17:43:15.788168596 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-06 17:43:41.508486336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-06 17:43:15.788168596 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-06 17:43:15.648166713 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

github-actions bot commented Dec 6, 2024

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-06 17:43:15.648166713 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 7760ff29110f1aefc999b34a78e81fb32523e969ea55220a065f31bfee83b9e6
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.0"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.0
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LW1hbmFnZXIuaW8vY2x1c3Rlci1pc3N1ZXIiOiJsZXRzZW5jcnlwdC1zdGFnaW5nIn0sImNsYXNzTmFtZSI6Im5naW54IiwiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJkZXBsb3ltZW50QW5ub3RhdGlvbnMiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJhbGVydHMiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9ydWxlcyIsIi9ldGMvY29uZmlnL2FsZXJ0cyJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInB1c2hnYXRld2F5Ijp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicmVwb3J0aW5nIjp7ImVycm9yUmVwb3J0aW5nIjp0cnVlLCJsb2dDb2xsZWN0aW9uIjp0cnVlLCJwcm9kdWN0QW5hbHl0aWNzIjp0cnVlLCJ2YWx1ZXNSZXBvcnRpbmciOnRydWV9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwibm9kZVBvcnQiOnt9LCJwb3J0Ijo5MDkwLCJ0YXJnZXRQb3J0Ijo5MDkwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibG9nTGV2ZWwiOiJpbmZvIiwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCJ9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC4gVGhlIGxhYmVsIG11c3QgYmUgcHJlc2VudCBvbiB0aGUgSzhzIHNlcnZpY2UgZW5kcG9pbnRzIGFuZCBub3QganVzdCBwb2RzLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYW5ub3RhdGlvbnMiOnt9LCJiYXNlVVJMIjoiIiwiY29uZmlnTWFwT3ZlcnJpZGVOYW1lIjoiIiwiY29uZmlnUGF0aCI6Ii9ldGMvY29uZmlnL3Byb21ldGhldXMueW1sIiwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7fSwiZW1wdHlEaXIiOnsic2l6ZUxpbWl0IjoiIn0sImVuYWJsZWQiOnRydWUsImVudiI6W10sImV4dHJhQXJncyI6eyJxdWVyeS5tYXgtY29uY3VycmVuY3kiOjEsInF1ZXJ5Lm1heC1zYW1wbGVzIjoxMDAwMDAwMDB9LCJleHRyYUNvbmZpZ21hcE1vdW50cyI6W10sImV4dHJhRmxhZ3MiOlsid2ViLmVuYWJsZS1saWZlY3ljbGUiXSwiZXh0cmFIb3N0UGF0aE1vdW50cyI6W10sImV4dHJhSW5pdENvbnRhaW5lcnMiOltdLCJleHRyYVNlY3JldE1vdW50cyI6W10sImV4dHJhVm9sdW1lTW91bnRzIjpbXSwiZXh0cmFWb2x1bWVzIjpbXSwiZ2xvYmFsIjp7ImV2YWx1YXRpb25faW50ZXJ2YWwiOiIxbSIsImV4dGVybmFsX2xhYmVscyI6eyJjbHVzdGVyX2lkIjoic3gtY25wLW9zcyJ9LCJzY3JhcGVfaW50ZXJ2YWwiOiIxbSIsInNjcmFwZV90aW1lb3V0IjoiNjBzIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoicXVheS5pby9wcm9tZXRoZXVzL3Byb21ldGhldXMiLCJ0YWciOiJ2Mi41NS4xIn0sImxpdmVuZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJsaXZlbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJsaXZlbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwibGl2ZW5lc3NQcm9iZVRpbWVvdXQiOjMsIm5hbWUiOiJzZXJ2ZXIiLCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFjY2Vzc01vZGVzIjpbIlJlYWRXcml0ZU9uY2UiXSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJleGlzdGluZ0NsYWltIjoiIiwibW91bnRQYXRoIjoiL2RhdGEiLCJzaXplIjoiMzJHaSIsInN1YlBhdGgiOiIifSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwb2RMYWJlbHMiOnt9LCJwcmVmaXhVUkwiOiIiLCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInJlYWRpbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywicmVhZGluZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsInJlYWRpbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwicmVhZGluZXNzUHJvYmVUaW1lb3V0IjozLCJyZW1vdGVSZWFkIjp7fSwicmVtb3RlV3JpdGUiOnt9LCJyZXBsaWNhQ291bnQiOjEsInJlc291cmNlcyI6e30sInJldGVudGlvbiI6Ijk3aCIsInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJjbHVzdGVySVAiOiIiLCJleHRlcm5hbElQcyI6W10sImxhYmVscyI6e30sImxvYWRCYWxhbmNlcklQIjoiIiwibG9hZEJhbGFuY2VyU291cmNlUmFuZ2VzIjpbXSwic2VydmljZVBvcnQiOjgwLCJzZXNzaW9uQWZmaW5pdHkiOiJOb25lIiwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOjMwMCwidG9sZXJhdGlvbnMiOltdfSwic2VydmVyRmlsZXMiOnsiYWxlcnRpbmdfcnVsZXMueW1sIjp7fSwicHJvbWV0aGV1cy55bWwiOnsicnVsZV9maWxlcyI6WyIvZXRjL2NvbmZpZy9yZWNvcmRpbmdfcnVsZXMueW1sIiwiL2V0Yy9jb25maWcvYWxlcnRpbmdfcnVsZXMueW1sIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.0
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.0
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.0
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.0";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.0",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-06 17:43:15.648166713 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-06 17:43:15.648166713 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-06 17:43:15.644166660 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-06 17:43:15.648166713 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-06 17:43:15.648166713 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-06 17:43:41.368485077 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-06 17:43:15.648166713 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

github-actions bot commented Dec 6, 2024

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 3200005267ed0d35ec8656b0c4da50d94bf7156275304458eccd802ce21d54ee
+        checksum/configs: f5644bce519dbf7deac8f870f851206981f1d3ecd6835c299655d8cf3e3003df
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.0"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.0
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifSwiZ3JhZmFuYVVSTCI6Imh0dHBzOi8vZ3JhZmFuYS5sYWIuc3V4ZXNzaXQuazhzLmNsb3VkLnVpYmsuYWMuYXQifSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJhZGRpdGlvbmFsU2VjdXJpdHlDb250ZXh0Ijp7fSwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImNvbmZpZyI6eyJkZXN0aW5hdGlvbnMiOnsiY3Jvc3MtcmVnaW9uIjpbXSwiZGlyZWN0LWNsYXNzaWZpY2F0aW9uIjpbXSwiaW4tcmVnaW9uIjpbXSwiaW4tem9uZSI6WyIxMjcuMC4wLjAvOCIsIjE2OS4yNTQuMC4wLzE2IiwiMTAuMC4wLjAvOCIsIjE3Mi4xNi4wLjAvMTIiLCIxOTIuMTY4LjAuMC8xNiJdLCJpbnRlcm5ldCI6W119LCJzZXJ2aWNlcyI6eyJhbWF6b24td2ViLXNlcnZpY2VzIjp0cnVlLCJhenVyZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZSwiZ29vZ2xlLWNsb3VkLXNlcnZpY2VzIjp0cnVlfX0sImVuYWJsZWQiOnRydWUsImV4dHJhQXJncyI6W10sImhlYWx0aENoZWNrUHJvYmVzIjp7fSwiaW1hZ2UiOnsicmVwb3NpdG9yeSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbmV0d29yay1jb3N0cyIsInRhZyI6InYwLjE3LjYifSwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibG9nTGV2ZWwiOiJpbmZvIiwibm9kZVNlbGVjdG9yIjp7fSwicG9ydCI6MzAwMSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJwcm9tZXRoZXVzU2NyYXBlIjpmYWxzZSwicmVzb3VyY2VzIjp7ImxpbWl0cyI6eyJjcHUiOiI1MDBtIn0sInJlcXVlc3RzIjp7ImNwdSI6IjUwbSIsIm1lbW9yeSI6IjIwTWkifX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9fSwidG9sZXJhdGlvbnMiOltdLCJ0cmFmZmljTG9nZ2luZyI6dHJ1ZSwidXBkYXRlU3RyYXRlZ3kiOnsidHlwZSI6IlJvbGxpbmdVcGRhdGUifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJwcm9tZXRoZXVzUnVsZSI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNlcnZpY2VNb25pdG9yIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJuZXR3b3JrQ29zdHMiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWUsImludGVydmFsIjoiMW0iLCJtZXRyaWNSZWxhYmVsaW5ncyI6W10sInJlbGFiZWxpbmdzIjpbXSwic2NyYXBlVGltZW91dCI6IjEwcyJ9LCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJzZWN1cml0eUNvbnRleHQiOnsiZnNHcm91cCI6MTAwMSwiZnNHcm91cENoYW5nZVBvbGljeSI6Ik9uUm9vdE1pc21hdGNoIiwicnVuQXNHcm91cCI6MTAwMSwicnVuQXNOb25Sb290Ijp0cnVlLCJydW5Bc1VzZXIiOjEwMDEsInNlY2NvbXBQcm9maWxlIjp7InR5cGUiOiJSdW50aW1lRGVmYXVsdCJ9fX0sImdyYWZhbmEiOnsiYWRtaW5QYXNzd29yZCI6InN0cm9uZ3Bhc3N3b3JkIiwiYWRtaW5Vc2VyIjoiYWRtaW4iLCJhZmZpbml0eSI6e30sImFubm90YXRpb25zIjp7fSwiZGFzaGJvYXJkUHJvdmlkZXJzIjp7fSwiZGFzaGJvYXJkcyI6e30sImRhc2hib2FyZHNDb25maWdNYXBzIjp7fSwiZGVwbG95bWVudFN0cmF0ZWd5IjoiUm9sbGluZ1VwZGF0ZSIsImRvd25sb2FkRGFzaGJvYXJkc0ltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY3VybGltYWdlcy9jdXJsIiwidGFnIjoibGF0ZXN0In0sImVudiI6e30sImVudkZyb21TZWNyZXQiOiIiLCJleHRyYVNlY3JldE1vdW50cyI6W10sImdyYWZhbmEuaW5pIjp7ImFuYWx5dGljcyI6eyJjaGVja19mb3JfdXBkYXRlcyI6dHJ1ZX0sImF1dGguYW5vbnltb3VzIjp7ImVuYWJsZWQiOnRydWUsIm9yZ19uYW1lIjoiTWFpbiBPcmcuIiwib3JnX3JvbGUiOiJFZGl0b3IifSwiZ3JhZmFuYV9uZXQiOnsidXJsIjoiaHR0cHM6Ly9ncmFmYW5hLm5ldCJ9LCJsb2ciOnsibW9kZSI6ImNvbnNvbGUifSwicGF0aHMiOnsiZGF0YSI6Ii92YXIvbGliL2dyYWZhbmEvZGF0YSIsImxvZ3MiOiIvdmFyL2xvZy9ncmFmYW5hIiwicGx1Z2lucyI6Ii92YXIvbGliL2dyYWZhbmEvcGx1Z2lucyIsInByb3Zpc2lvbmluZyI6Ii9ldGMvZ3JhZmFuYS9wcm92aXNpb25pbmcifSwic2VydmVyIjp7InJvb3RfdXJsIjoiJShwcm90b2NvbClzOi8vJShkb21haW4pczolKGh0dHBfcG9ydClzL2dyYWZhbmEiLCJzZXJ2ZV9mcm9tX3N1Yl9wYXRoIjpmYWxzZX19LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdyYWZhbmEvZ3JhZmFuYSIsInRhZyI6IjExLjMuMSJ9LCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjEwLCJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjMwfSwibm9kZVNlbGVjdG9yIjp7fSwicGx1Z2lucyI6W10sInBvZEFubm90YXRpb25zIjp7fSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInJlYWRpbmVzc1Byb2JlIjp7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvaGVhbHRoIiwicG9ydCI6MzAwMH19LCJyZXBsaWNhcyI6MSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInBvcnQiOjgwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImNyZWF0ZSI6dHJ1ZSwibmFtZSI6IiJ9LCJzaWRlY2FyIjp7ImRhc2hib2FyZHMiOnsiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlcnJvcl90aHJvdHRsZV9zbGVlcCI6MCwiZm9sZGVyIjoiL3RtcC9kYXNoYm9hcmRzIiwibGFiZWwiOiJncmFmYW5hX2Rhc2hib2FyZCIsImxhYmVsVmFsdWUiOiIxIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ2hjci5pby9raXdpZ3JpZC9rOHMtc2lkZWNhciIsInRhZyI6IjEuMjguMCJ9LCJyZXNvdXJjZXMiOnt9fSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sImxvZ0xldmVsIjoiaW5mbyIsIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAifSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn0sImdyYWZhbmFVUkwiOiJodHRwczovL2dyYWZhbmEubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0In0sIm5ldHdvcmtDb3N0cyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiYWRkaXRpb25hbFNlY3VyaXR5Q29udGV4dCI6e30sImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJjb25maWciOnsiZGVzdGluYXRpb25zIjp7ImNyb3NzLXJlZ2lvbiI6W10sImRpcmVjdC1jbGFzc2lmaWNhdGlvbiI6W10sImluLXJlZ2lvbiI6W10sImluLXpvbmUiOlsiMTI3LjAuMC4wLzgiLCIxNjkuMjU0LjAuMC8xNiIsIjEwLjAuMC4wLzgiLCIxNzIuMTYuMC4wLzEyIiwiMTkyLjE2OC4wLjAvMTYiXSwiaW50ZXJuZXQiOltdfSwic2VydmljZXMiOnsiYW1hem9uLXdlYi1zZXJ2aWNlcyI6dHJ1ZSwiYXp1cmUtY2xvdWQtc2VydmljZXMiOnRydWUsImdvb2dsZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZX19LCJlbmFibGVkIjp0cnVlLCJleHRyYUFyZ3MiOltdLCJoZWFsdGhDaGVja1Byb2JlcyI6e30sImltYWdlIjp7InJlcG9zaXRvcnkiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW5ldHdvcmstY29zdHMiLCJ0YWciOiJ2MC4xNy42In0sImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxvZ0xldmVsIjoiaW5mbyIsIm5vZGVTZWxlY3RvciI6e30sInBvcnQiOjMwMDEsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicHJvbWV0aGV1c1NjcmFwZSI6ZmFsc2UsInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiNTAwbSJ9LCJyZXF1ZXN0cyI6eyJjcHUiOiI1MG0iLCJtZW1vcnkiOiIyME1pIn19LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fX0sInRvbGVyYXRpb25zIjpbXSwidHJhZmZpY0xvZ2dpbmciOnRydWUsInVwZGF0ZVN0cmF0ZWd5Ijp7InR5cGUiOiJSb2xsaW5nVXBkYXRlIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiMjIEVuYWJsZXMgc2NyYXBpbmcgb2YgTlZJRElBIEdQVSBtZXRyaWNzIHZpYSBkY2dtLWV4cG9ydGVyLiBTY3JhcGVzIGFsbFxuIyMgZW5kcG9pbnRzIHdoaWNoIGNvbnRhaW4gXCJkY2dtLWV4cG9ydGVyXCIgaW4gbGFiZWxzIFwiYXBwXCIsXG4jIyBcImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudFwiLCBvciBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIiB3aXRoIGEgY2FzZVxuIyMgaW5zZW5zaXRpdmUgbWF0Y2guIFRoZSBsYWJlbCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIEs4cyBzZXJ2aWNlIGVuZHBvaW50cyBhbmQgbm90IGp1c3QgcG9kcy5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImFubm90YXRpb25zIjp7fSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicHJvbWV0aGV1c1J1bGUiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWV9LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzZXJ2aWNlTW9uaXRvciI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJ2YWwiOiIxbSIsIm1ldHJpY1JlbGFiZWxpbmdzIjpbXSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwicmVsYWJlbGluZ3MiOltdLCJzY3JhcGVUaW1lb3V0IjoiMTBzIn0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -190,9 +173,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.0
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -240,9 +223,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.0
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -294,9 +277,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.0
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.0";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.0",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: network-costs-config
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -7,9 +7,9 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
 spec:
   clusterIP: None
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -7,23 +7,25 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
+  annotations:
 spec:
   updateStrategy:
     type: RollingUpdate
   selector:
     matchLabels:
       app: release-name-network-costs
   template:
     metadata:
+      annotations:
       labels:
         app.kubernetes.io/instance: kubecost
         app.kubernetes.io/name: network-costs
-        helm.sh/chart: cost-analyzer-2.4.3
+        helm.sh/chart: cost-analyzer-2.5.0
         app.kubernetes.io/managed-by: Helm
         app: release-name-network-costs
     spec:
       hostNetwork: true
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -4,11 +4,11 @@
 kind: ConfigMap
 metadata:
   name: app-configs
   namespace: default
-  labels: 
+  labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
@@ -24,8 +23,7 @@
     matchNames:
       - default
   selector:
     matchLabels:
-      
       app.kubernetes.io/name: cost-analyzer
       app.kubernetes.io/instance: release-name
       app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-06 17:43:41.640487522 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-06 17:43:15.920170370 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-network-costs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.0
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-06 17:43:41.644487558 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-06 17:43:15.924170424 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi

@jkleinlercher
Copy link
Contributor

no dashboards anymore?

@renovate renovate bot changed the title chore(deps): update helm release cost-analyzer to v2.5.0 chore(deps): update helm release cost-analyzer to v2.5.1 Dec 17, 2024
@renovate renovate bot force-pushed the renovate/cost-analyzer-2.x branch from 9ac1034 to 24ca950 Compare December 17, 2024 19:42
Copy link
Contributor

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-17 19:43:01.978452609 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-17 19:42:35.664219338 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 45f899ca0f060cb78b76717b768816a257756505a52b46a72a552cbed367f9ce
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJlbmFibGVkIjp0cnVlLCJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInBhdGhUeXBlIjoiSW1wbGVtZW50YXRpb25TcGVjaWZpYyIsInBhdGhzIjpbIi8iXSwidGxzIjpbeyJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJsb2dMZXZlbCI6ImluZm8iLCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXRjT2Zmc2V0IjoiKzAwOjAwIn0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJzeC1jbnAtb3NzIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLiBUaGUgbGFiZWwgbXVzdCBiZSBwcmVzZW50IG9uIHRoZSBLOHMgc2VydmljZSBlbmRwb2ludHMgYW5kIG5vdCBqdXN0IHBvZHMuXG4jIyBSZWZzOlxuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9ncHUtb3BlcmF0b3IvYmxvYi9kNDMxNmE0MTViYmQ2ODRjZTg0MTZhODgwNDIzMDVmYzFhMDkzYWE0L2Fzc2V0cy9zdGF0ZS1kY2dtLWV4cG9ydGVyLzA2MDBfc2VydmljZS55YW1sI0w3XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2RjZ20tZXhwb3J0ZXIvYmxvYi81NGZkMWNhMTM3YzY2NTExYTg3YTcyMDM5MDYxMzY4MGI5YmRhYmRkL2RlcGxveW1lbnQvdGVtcGxhdGVzL3NlcnZpY2UueWFtbCNMMjNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWRjZ20tZXhwb3J0ZXJcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogZW5kcG9pbnRzXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwLCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fY29tcG9uZW50LCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICg/aSkoLipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLiopXG4iLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhZmZpbml0eSI6e30sImFsZXJ0bWFuYWdlcnMiOltdLCJhbm5vdGF0aW9ucyI6e30sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiXSwic2NyYXBlX2NvbmZpZ3MiOlt7ImpvYl9uYW1lIjoicHJvbWV0aGV1cyIsInN0YXRpY19jb25maWdzIjpbeyJ0YXJnZXRzIjpbImxvY2FsaG9zdDo5MDkwIl19XX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2Rlcy1jYWR2aXNvciIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfc3BlY19jcHVfc2hhcmVzfGNvbnRhaW5lcl9zcGVjX21lbW9yeV9saW1pdF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNhZHZpc29yX3ZlcnNpb25faW5mb3xrdWJlY29zdF9wdl9pbmZvKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJjb250YWluZXIiXSwidGFyZ2V0X2xhYmVsIjoiY29udGFpbmVyX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbInBvZCJdLCJ0YXJnZXRfbGFiZWwiOiJwb2RfbmFtZSJ9XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzL2NhZHZpc29yIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGt1YmVsZXRfdm9sdW1lX3N0YXRzX3VzZWRfYnl0ZXMpIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcyIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtc2VydmljZS1lbmRwb2ludHMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJlbmRwb2ludHMifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X2FsbG9jYXRpb258Y29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9ncHVfYWxsb2NhdGlvbnxjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXN8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8RENHTV9GSV9ERVZfR1BVX1VUSUx8ZGVwbG95bWVudF9tYXRjaF9sYWJlbHN8a3ViZV9kYWVtb25zZXRfc3RhdHVzX2Rlc2lyZWRfbnVtYmVyX3NjaGVkdWxlZHxrdWJlX2RhZW1vbnNldF9zdGF0dXNfbnVtYmVyX3JlYWR5fGt1YmVfZGVwbG95bWVudF9zcGVjX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc19hdmFpbGFibGV8a3ViZV9qb2Jfc3RhdHVzX2ZhaWxlZHxrdWJlX25hbWVzcGFjZV9hbm5vdGF0aW9uc3xrdWJlX25hbWVzcGFjZV9sYWJlbHN8a3ViZV9ub2RlX2luZm98a3ViZV9ub2RlX2xhYmVsc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHl8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jb25kaXRpb258a3ViZV9wZXJzaXN0ZW50dm9sdW1lX2NhcGFjaXR5X2J5dGVzfGt1YmVfcGVyc2lzdGVudHZvbHVtZV9zdGF0dXNfcGhhc2V8a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1faW5mb3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9yZXNvdXJjZV9yZXF1ZXN0c19zdG9yYWdlX2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9pbmZvfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Jlc3RhcnRzX3RvdGFsfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcnVubmluZ3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Rlcm1pbmF0ZWRfcmVhc29ufGt1YmVfcG9kX2xhYmVsc3xrdWJlX3BvZF9vd25lcnxrdWJlX3BvZF9zdGF0dXNfcGhhc2V8a3ViZV9yZXBsaWNhc2V0X293bmVyfGt1YmVfc3RhdGVmdWxzZXRfcmVwbGljYXN8a3ViZV9zdGF0ZWZ1bHNldF9zdGF0dXNfcmVwbGljYXN8a3ViZWNvc3RfY2x1c3Rlcl9pbmZvfGt1YmVjb3N0X2NsdXN0ZXJfbWFuYWdlbWVudF9jb3N0fGt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGt1YmVjb3N0X2xvYWRfYmFsYW5jZXJfY29zdHxrdWJlY29zdF9uZXR3b3JrX2ludGVybmV0X2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfcmVnaW9uX2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfem9uZV9lZ3Jlc3NfY29zdHxrdWJlY29zdF9ub2RlX2lzX3Nwb3R8a3ViZWNvc3RfcG9kX25ldHdvcmtfZWdyZXNzX2J5dGVzX3RvdGFsfG5vZGVfY3B1X2hvdXJseV9jb3N0fG5vZGVfY3B1X3NlY29uZHNfdG90YWx8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkX3RvdGFsfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkX3RvdGFsfG5vZGVfZmlsZXN5c3RlbV9kZXZpY2VfZXJyb3J8bm9kZV9ncHVfY291bnR8bm9kZV9ncHVfaG91cmx5X2Nvc3R8bm9kZV9tZW1vcnlfQnVmZmVyc19ieXRlc3xub2RlX21lbW9yeV9DYWNoZWRfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtQXZhaWxhYmxlX2J5dGVzfG5vZGVfbWVtb3J5X01lbUZyZWVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtVG90YWxfYnl0ZXN8bm9kZV9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfG5vZGVfcmFtX2hvdXJseV9jb3N0fG5vZGVfdG90YWxfaG91cmx5X2Nvc3R8cG9kX3B2Y19hbGxvY2F0aW9ufHB2X2hvdXJseV9jb3N0fHNlcnZpY2Vfc2VsZWN0b3JfbGFiZWxzfHN0YXRlZnVsU2V0X21hdGNoX2xhYmVsc3xrdWJlY29zdF9wdl9pbmZvfHVwKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6dHJ1ZSwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY3JhcGUiXX0seyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoLipub2RlLWV4cG9ydGVyfGt1YmVjb3N0LW5ldHdvcmstY29zdHMpIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19lbmRwb2ludHNfbmFtZSJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihodHRwcz8pIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY2hlbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19zY2hlbWVfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcGF0aCJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoW146XSspKD86OlxcZCspPzsoXFxkKykiLCJyZXBsYWNlbWVudCI6IiQxOiQyIiwic291cmNlX2xhYmVscyI6WyJfX2FkZHJlc3NfXyIsIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BvcnQiXSwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2xhYmVsXyguKykifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25hbWVzcGFjZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWVzcGFjZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfcG9kX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25vZGUifV19XX0sInJlY29yZGluZ19ydWxlcy55bWwiOnt9LCJydWxlcyI6eyJncm91cHMiOlt7Im5hbWUiOiJDUFUiLCJydWxlcyI6W3siZXhwciI6InN1bShyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkpIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2U6cmF0ZTVtIn0seyJleHByIjoicmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2Vfbm9zdW06cmF0ZTVtIn0seyJleHByIjoiYXZnKGlyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiUE9EXCIsIGNvbnRhaW5lciE9XCJcIn1bNW1dKSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9jcHVfdXNhZ2VfaXJhdGUifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9XX0seyJuYW1lIjoiU2F2aW5ncyIsInJ1bGVzIjpbeyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifV19XX19LCJzZXJ2aWNlQWNjb3VudHMiOnsiYWxlcnRtYW5hZ2VyIjp7ImNyZWF0ZSI6dHJ1ZX0sIm5vZGVFeHBvcnRlciI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9fX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-17 19:43:01.978452609 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-17 19:42:35.664219338 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-17 19:43:01.982452643 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-17 19:43:01.978452609 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-17 19:42:35.664219338 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-17 19:43:01.978452609 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-17 19:42:35.664219338 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-17 19:43:01.978452609 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-17 19:42:35.664219338 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-17 19:43:01.978452609 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-17 19:42:35.664219338 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-17 19:43:01.981452634 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-17 19:42:35.666219356 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-17 19:43:01.982452643 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-17 19:42:35.667219365 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-17 19:43:02.257454950 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-17 19:42:35.937221795 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

Changes Default Values
diff -U 4 -r out-default-values/target/kubecost_cost-analyzer_default-values.out out-default-values/pr/kubecost_cost-analyzer_default-values.out
--- out-default-values/target/kubecost_cost-analyzer_default-values.out	2024-12-17 19:43:02.370455898 +0000
+++ out-default-values/pr/kubecost_cost-analyzer_default-values.out	2024-12-17 19:42:36.044222759 +0000
@@ -2,11 +2,12 @@
   # zone: cluster.local (use only if your DNS server doesn't live in the same zone as kubecost)
   prometheus:
     enabled: true  # Kubecost depends on Prometheus data, it is not optional. When enabled: false, Prometheus will not be installed and you must configure your own Prometheus to scrape kubecost as well as provide the fqdn below. -- Warning: Before changing this setting, please read to understand the risks https://docs.kubecost.com/install-and-configure/install/custom-prom
     fqdn: http://cost-analyzer-prometheus-server.default.svc  # example address of a prometheus to connect to. Include protocol (http:// or https://) Ignored if enabled: true
-    # insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
+    insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
     # queryServiceBasicAuthSecretName: dbsecret # kubectl create secret generic dbsecret -n kubecost --from-file=USERNAME --from-file=PASSWORD
     # queryServiceBearerTokenSecretName: mcdbsecret  # kubectl create secret generic mcdbsecret -n kubecost --from-file=TOKEN
+    kubeRBACProxy: false  # If true, kubecost will use kube-rbac-proxy to authenticate with in cluster Prometheus for openshift
 
   grafana:
     enabled: true  # If false, Grafana will not be installed
     domainName: cost-analyzer-grafana.default.svc  # example grafana domain Ignored if enabled: true
@@ -53,8 +54,10 @@
   # or `global.prometheus.fqdn=http://{{ template "cost-analyzer.fullname" . }}-mimir-proxy.{{ .Release.Namespace }}.svc:8085/prometheus'
   # Learn more at https://grafana.com/docs/mimir/latest/operators-guide/secure/authentication-and-authorization/#without-an-authenticating-reverse-proxy
   mimirProxy:
     enabled: false
+    ## Annotations to be added to the Mimir Proxy deployment template
+    annotations: {}
     name: mimir-proxy
     image: nginxinc/nginx-unprivileged
     port: 8085
     mimirEndpoint: $mimir_endpoint  # Your Mimir query endpoint. If your Mimir query endpoint is http://example.com/prometheus, replace $mimir_endpoint with http://example.com/
@@ -62,11 +65,10 @@
     # basicAuth:
       # username: user
       # password: pwd
 
-  # Azure Monitor Managed Service for Prometheus
-  # See https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/azure-monitor/essentials/prometheus-metrics-overview.md for information
-  # and https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines for more information on setting this up
+  ## Azure Monitor Managed Service for Prometheus
+  ## Ref: https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines
   ammsp:
     enabled: false
     prometheusServerEndpoint: http://localhost:8081/
     remoteWriteService: $<AMMSP_METRICS_INGESTION_ENDPOINT>
@@ -83,76 +85,68 @@
       identityType: userAssigned
       aadClientId: $<AZURE_MANAGED_IDENTITY_CLIENT_ID>
       aadTenantId: $<AZURE_MANAGED_IDENTITY_TENANT_ID>
 
+  ## Kubecost Alerting
+  ## Ref: http://docs.kubecost.com/alerts
   notifications:
-    # Kubecost alerting configuration
-    # Ref: http://docs.kubecost.com/alerts
     # alertConfigs:
-      # frontendUrl: http://localhost:9090 # optional, used for linkbacks
-      # globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Slack alerts
-      # globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Microsoft Teams alerts
-      # globalAlertEmails:
-      #   - [email protected]
-      #   - [email protected]
-      # globalEmailSubject: Custom Subject
-      # Alerts generated by kubecost, about cluster data
-      # alerts:
-        # Daily namespace budget alert on namespace `kubecost`
-        # - type: budget                # supported: budget, recurringUpdate
-        #   threshold: 50               # optional, required for budget alerts
-        #   window: daily               # or 1d
-        #   aggregation: namespace
-        #   filter: kubecost
-        #   ownerContact:               # optional, overrides globalAlertEmails default
-        #     - [email protected]
-        #     - [email protected]
-        #   # optional, used for alert-specific Slack and Microsoft Teams alerts
-        #   slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
-        #   msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX
-
-        # Daily cluster budget alert on cluster `cluster-one`
-        # - type: budget
-        #   threshold: 200.8        # optional, required for budget alerts
-        #   window: daily           # or 1d
-        #   aggregation: cluster
-        #   filter: cluster-one     # does not accept csv
-
-        # Recurring weekly update (weeklyUpdate alert)
-        # - type: recurringUpdate
-        #   window: weekly          # or 7d
-        #   aggregation: namespace
-        #   filter: '*'
-
-        # Recurring weekly namespace update on kubecost namespace
-        # - type: recurringUpdate
-        #   window: weekly # or 7d
-        #   aggregation: namespace
-        #   filter: kubecost
-
-        # Spend Change Alert
-        # - type: spendChange         # change relative to moving avg
-        #   relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
-        #   window: 1d                # accepts ‘d’, ‘h’
-        #   baselineWindow: 30d       # previous window, offset by window
-        #   aggregation: namespace
-        #   filter: kubecost, default # accepts csv
-
-        # Health Score Alert
-        # - type: health              # Alerts when health score changes by a threshold
-        #   window: 10m
-        #   threshold: 5              # Send Alert if health scores changes by 5 or more
-
-        # Kubecost Health Diagnostic
-        # - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
-        #   window: 10m
+    #   frontendUrl: http://localhost:9090  # Optional
+    #   globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalAlertEmails:
+    #     - [email protected]
+    #     - [email protected]
+    #   globalEmailSubject: Custom Subject
+    #   alerts:
+    #     # Daily namespace budget alert on namespace `kubecost`
+    #     - type: budget                # supported: budget, recurringUpdate
+    #       threshold: 50               # optional, required for budget alerts
+    #       window: daily               # or 1d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #       ownerContact:               # optional, overrides globalAlertEmails default
+    #         - [email protected]
+    #         - [email protected]
+    #       slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #       msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #     # Daily cluster budget alert on cluster `cluster-one`
+    #     - type: budget
+    #       threshold: 200.8        # optional, required for budget alerts
+    #       window: daily           # or 1d
+    #       aggregation: cluster
+    #       filter: cluster-one     # does not accept csv
+    #     # Recurring weekly update (weeklyUpdate alert)
+    #     - type: recurringUpdate
+    #       window: weekly          # or 7d
+    #       aggregation: namespace
+    #       filter: '*'
+    #     # Recurring weekly namespace update on kubecost namespace
+    #     - type: recurringUpdate
+    #       window: weekly # or 7d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #     # Spend Change Alert
+    #     - type: spendChange         # change relative to moving avg
+    #       relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
+    #       window: 1d                # accepts ‘d’, ‘h’
+    #       baselineWindow: 30d       # previous window, offset by window
+    #       aggregation: namespace
+    #       filter: kubecost, default # accepts csv
+    #     # Health Score Alert
+    #     - type: health              # Alerts when health score changes by a threshold
+    #       window: 10m
+    #       threshold: 5              # Send Alert if health scores changes by 5 or more
+    #     # Kubecost Health Diagnostic
+    #     - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
+    #       window: 10m
 
     alertmanager:  # Supply an alertmanager FQDN to receive notifications from the app.
       enabled: false  # If true, allow kubecost to write to your alertmanager
       fqdn: http://cost-analyzer-prometheus-server.default.svc  # example fqdn. Ignored if prometheus.enabled: true
 
-    # Set saved Cost Allocation report(s) accessible from /reports
-    # Ref: http://docs.kubecost.com/saved-reports
+  ## Kubecost Saved Reports
+  ## Ref: http://docs.kubecost.com/saved-reports
   savedReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Example Saved Report 0"
@@ -160,35 +154,32 @@
         aggregateBy: "namespace"
         chartDisplay: "category"
         idle: "separate"
         rate: "cumulative"
-        accumulate: false  # daily resolution
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        accumulate: false   # daily resolution
+        filters:            # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "cluster"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: ":"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: ":"   # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "dev"
       - title: "Example Saved Report 1"
         window: "month"
         aggregateBy: "controllerKind"
         chartDisplay: "category"
         idle: "share"
         rate: "monthly"
         accumulate: false
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        filters:              # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "namespace"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: "!:"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: "!:"    # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "kubecost"
       - title: "Example Saved Report 2"
         window: "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z"
         aggregateBy: "service"
         chartDisplay: "category"
         idle: "hide"
         rate: "daily"
         accumulate: true  # entire window resolution
-        filters: []  # if no filters, specify empty array
-
-  # Set saved Asset report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
+        filters: []       # if no filters, specify empty array
   assetReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
     - title: "Example Asset Report 0"
@@ -197,11 +188,8 @@
       accumulate: false  # daily resolution
       filters:
         - property: "cluster"
           value: "cluster-one"
-
-  # Set saved Cloud Cost report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
   cloudCostReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Cloud Cost Report 0"
@@ -214,8 +202,12 @@
 
   podAnnotations: {}
     # iam.amazonaws.com/role: role-arn
 
+  # Annotations to be added for all controllers (StatefulSets, Deployments, DaemonSets)
+  annotations: {}
+    # iam.amazonaws.com/role: role-arn
+
   # Applies these labels to all Deployments, StatefulSets, DaemonSets, and their pod templates.
   additionalLabels: {}
 
   securityContext:
@@ -233,8 +225,25 @@
     capabilities:
       drop:
       - ALL
 
+  # Installs custom CA certificates onto Kubecost pods
+  updateCaTrust:
+    enabled: false  # Set to true to enable the init container for updating CA trust
+    # Security context settings for the init container.
+    securityContext:
+      runAsUser: 0
+      runAsGroup: 0
+      runAsNonRoot: false
+      allowPrivilegeEscalation: false
+      readOnlyRootFilesystem: true
+      seccompProfile:
+        type: RuntimeDefault
+    caCertsSecret: ca-certs-secret  # The name of the Secret containing custom CA certificates to mount to the cost-model container.
+    # caCertsConfig: ca-certs-config  # The name of the ConfigMap containing the CA trust configuration.
+    resources: {}  # Resource requests and limits for the init container.
+    caCertsMountPath: /etc/pki/ca-trust/source/anchors  # The path where the custom CA certificates will be mounted in the init container
+
   # Platforms is a higher-level abstraction for platform-specific values and settings.
   platforms:
     # Deploying to OpenShift (OCP) requires enabling this option.
     openshift:
@@ -242,8 +251,15 @@
       route:
         enabled: false  # Create an OpenShift Route.
         annotations: {}  # Add annotations to the Route.
         # host: kubecost.apps.okd4.example.com  # Add a custom host for your Route.
+
+        # OPTIONAL. The following configs only to be enabled when using a Prometheus instance already installed in the cluster.
+        createMonitoringClusterRoleBinding: false  # Create a ClusterRoleBinding to grant the Kubecost serviceaccount access to query Prometheus.
+        createMonitoringResourceReaderRoleBinding: false  # Create a Role and Role Binding to allow Prometheus to list and watch Kubecost resources.
+        monitoringServiceAccountName: prometheus-k8s  # Name of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+        monitoringServiceAccountNamespace: openshift-monitoring  # Namespace of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+
       # Create Security Context Constraint resources for the DaemonSets requiring additional privileges.
       scc:
         nodeExporter: false  # Creates an SCC for Prometheus Node Exporter. This requires Node Exporter be enabled.
         networkCosts: false  # Creates an SCC for Kubecost network-costs. This requires network-costs be enabled.
@@ -258,18 +274,24 @@
       skipSanityChecks: false  # If true, skip all sanity/existence checks for resources like Secrets.
 
   ## Kubecost Integrations
   ## Ref: https://docs.kubecost.com/integrations
-  ##
   integrations:
+    turbonomic:
+      enabled: false         # Set to true to enable the Turbonomic integration
+      clientId: ""           # Client ID generated from the OAuth Client created
+      clientSecret: ""       # Client Secret generated from the OAuth Client created
+      role: ""               # Role that the OAuth Client was created with (e.g. ADMINISTRATOR, SITE_ADMIN, etc.)
+      host: ""               # URL to your turbonomic API. EG: https://turbonomic.example.com/
+      insecureClient: false  # Do not verify certificate
     postgres:
       enabled: false
-      runInterval: "12h"  # How frequently to run the integration.
-      databaseHost: ""  # REQUIRED. ex: my.postgres.database.azure.com
-      databasePort: ""  # REQUIRED. ex: 5432
-      databaseName: ""  # REQUIRED. ex: postgres
-      databaseUser: ""  # REQUIRED. ex: myusername
-      databasePassword: ""  # REQUIRED. ex: mypassword
+      runInterval: "12h"      # How frequently to run the integration.
+      databaseHost: ""        # REQUIRED. ex: my.postgres.database.azure.com
+      databasePort: ""        # REQUIRED. ex: 5432
+      databaseName: ""        # REQUIRED. ex: postgres
+      databaseUser: ""        # REQUIRED. ex: myusername
+      databasePassword: ""    # REQUIRED. ex: mypassword
       databaseSecretName: ""  # OPTIONAL. Specify your own k8s secret containing the above credentials. Must have key "creds.json".
 
       ## Configure what Postgres table to write to, and what parameters to pass
       ## when querying Kubecost's APIs. Ensure all parameters are enclosed in
@@ -303,8 +325,12 @@
 # nameOverride: ""
 ## Provide a full name override option for the chart.
 # fullnameOverride: ""
 
+## Provide additional labels for the chart.
+# chartLabels:
+#   app.kubernetes.io/name: kubecost-cost-analyzer
+
 ## This flag is only required for users upgrading to a new version of Kubecost.
 ## The flag is used to ensure users are aware of important
 ## (potentially breaking) changes included in the new version.
 ##
@@ -322,79 +348,77 @@
     region: "us-east-1"
     URI: s3://kc-csv-test/pricing_schema.csv  # a valid file URI
     csvAccessCredentials: pricing-schema-access-secret
 
-# SAML integration for user management and RBAC, enterprise key required
-# Ref: https://github.com/kubecost/docs/blob/main/user-management.md
+## Kubecost SAML (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-saml
 saml:
   enabled: false
-  # secretName: "kubecost-authzero"
-  # metadataSecretName: "kubecost-authzero-metadata" # One of metadataSecretName or idpMetadataURL must be set. defaults to metadataURL if set
-  # idpMetadataURL: "https://dev-elu2z98r.auth0.com/samlp/metadata/c6nY4M37rBP0qSO1IYIqBPPyIPxLS8v2"
-  # appRootURL: "http://localhost:9090" # sample URL
-  # authTimeout: 1440 # number of minutes the JWT will be valid
-  # redirectURL: "https://dev-elu2z98r.auth0.com/v2/logout" # callback URL redirected to after logout
-  # audienceURI: "http://localhost:9090" # by convention, the same as the appRootURL, but any string uniquely identifying kubecost to your samp IDP. Optional if you follow the convention
-  # nameIDFormat: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" If your SAML provider requires a specific nameid format
-  # isGLUUProvider: false # An additional URL parameter must be appended for GLUU providers
-  # encryptionCertSecret: "kubecost-saml-cert" # k8s secret where the x509 certificate used to encrypt an Okta saml response is stored
-  # decryptionKeySecret: "kubecost-sank-decryption-key" # k8s secret where the private key associated with the encryptionCertSecret is stored
-  # authSecret: "random-string" # value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
-  # authSecretName: "kubecost-saml-secret" # name of k8s secret where the authSecret will be stored, defaults to "kubecost-saml-secret" if not provided
+  # secretName: ""
+  # metadataSecretName: ""  # One of metadataSecretName or idpMetadataURL must be set. Defaults to idpMetadataURL if set.
+  # idpMetadataURL: ""
+  # appRootURL: ""
+  # authTimeout: 1440  # Number of minutes the JWT will be valid
+  # redirectURL: ""  # Callback URL redirected to after logout
+  # audienceURI: ""  # Usually the same as the appRootURL. Optionally any string uniquely identifying kubecost to your SAML IDP.
+  # nameIDFormat: ""  # If your SAML provider requires a specific nameid format
+  # isGLUUProvider: false  # An additional URL parameter must be appended for GLUU providers
+  # encryptionCertSecret: ""  # K8s secret storing the x509 certificate used to encrypt an Okta SAML response
+  # decryptionKeySecret: ""  # K8s secret storing the private key associated with the encryptionCertSecret
+  # authSecret: ""  # Value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
+  # authSecretName: ""  # Name of K8s secret where the authSecret will be stored. Defaults to "kubecost-saml-secret" if not provided.
   rbac:
     enabled: false
     # groups:
     #   - name: admin
-    #     enabled: false # if admin is disabled, all SAML users will be able to make configuration changes to the kubecost frontend
-    #     assertionName: "http://schemas.auth0.com/userType" # a SAML Assertion, one of whose elements has a value that matches on of the values in assertionValues
+    #     enabled: false  # If admin is disabled, all SAML users will be able to make configuration changes to the Kubecost frontend
+    #     assertionName: ""
     #     assertionValues:
     #       - "admin"
     #       - "superusers"
     #   - name: readonly
-    #     enabled: false # if readonly is disabled, all users authorized on SAML will default to readonly
-    #     assertionName:  "http://schemas.auth0.com/userType"
+    #     enabled: false  # If readonly is disabled, all users authorized on SAML will default to readonly
+    #     assertionName: ""
     #     assertionValues:
     #       - "readonly"
     #   - name: editor
-    #     enabled: true # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
-    #     assertionName: "http://schemas.auth0.com/userType"
+    #     enabled: true  # If editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #     assertionName: ""
     #     assertionValues:
     #       - "editor"
 
+## Kubecost OIDC (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-oidc
 oidc:
   enabled: false
-  clientID: ""  # application/client client_id parameter obtained from provider, used to make requests to server
-  clientSecret: ""  # application/client client_secret parameter obtained from provider, used to make requests to server
-  # secretName: "kubecost-oidc-secret" # k8s secret where clientsecret will be stored
-  # For use to provide a custom OIDC Secret. Overrides the usage of oidc.clientSecret and oidc.secretName.
-  # Should contain the field directly.
-  # Can be created using raw k8s secrets, external secrets, sealed secrets, or any other method.
+  clientID: ""  # Application client_id parameter obtained from provider. Used to make requests to server.
+  clientSecret: ""  # Application/client client_secret parameter obtained from provider. Used to make requests to server.
+  secretName: "kubecost-oidc-secret"  # K8s secret where clientsecret will be stored
   existingCustomSecret:
     enabled: false
-    name: ""  # name of the secret containing the client secret
-
-  # authURL: "https://my.auth.server/authorize" # endpoint for login to auth server
-  # loginRedirectURL: "http://my.kubecost.url/model/oidc/authorize" # Kubecost url configured in provider for redirect after authentication
-  # discoveryURL: "https://my.auth.server/.well-known/openid-configuration" # url for OIDC endpoint discovery
-  skipOnlineTokenValidation: false  # if true, will skip accessing OIDC introspection endpoint for online token verification, and instead try to locally validate JWT claims
-  useClientSecretPost: false  # if true, client secret will specifically only use client_secret_post method, otherwise it will attempt to send the secret in both the header and the body.
-  # hostedDomain: "example.com" # optional, blocks access to the auth domain specified in the hd claim of the provider ID token
+    name: ""  # Name of an existing clientSecret. Overrides the usage of oidc.clientSecret and oidc.secretName.
+  authURL: ""  # Authorization endpoint for your identity provider
+  loginRedirectURL: ""  # Kubecost URL endpoint which handles auth flow
+  discoveryURL: ""  # Your identity provider's endpoint sharing OIDC configuration
+  skipOnlineTokenValidation: false  # If true, validate JWT claims locally
+  useClientSecretPost: false  # If true, only use client_secret_post method. Otherwise attempt to send the secret in both the header and the body.
+  hostedDomain: ""  # Optional, blocks access to the auth domain specified in the hd claim of the provider ID token
   rbac:
     enabled: false
     # groups:
-    #   - name: admin
-    #     enabled: false # if admin is disabled, all authenticated users will be able to make configuration changes to the kubecost frontend
-    #     claimName: "roles" # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
-    #     claimValues: # Kubecost matches these strings with the roles created in your identity provider
+    #   - name: admin  # Admins have permissions to edit Kubecost settings and save reports
+    #     enabled: false
+    #     claimName: "roles"  # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
+    #     claimValues:  # Kubecost matches these strings with the roles created in your identity provider
     #       - "admin"
     #       - "superusers"
-    #   - name: readonly
-    #     enabled: false # if readonly is disabled, all authenticated users will default to readonly
-    #     claimName:  "roles"
+    #   - name: readonly  # Readonly users do not have permissions to edit Kubecost settings or save reports.
+    #     enabled: false
+    #     claimName: "roles"
     #     claimValues:
     #       - "readonly"
-    #   - name: editor
-    #     enabled: false # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #   - name: editor  # Editors have permissions to edit reports/alerts and act as readers otherwise
+    #     enabled: false
     #     claimName: "roles"
     #     claimValues:
     #       - "editor"
 
@@ -435,25 +459,14 @@
   resources:
     requests:
       cpu: "10m"
       memory: "55Mi"
-    # limits:
-    #   cpu: "100m"
-    #   memory: "256Mi"
   deploymentStrategy: {}
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
-
-  # Define a readiness probe for the Kubecost frontend container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
     failureThreshold: 6
-
-  # Define a liveness probe for the Kubecost frontend container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
@@ -495,49 +508,8 @@
   # emitNamespaceAnnotations: false
   # emitKsmV1Metrics: true # emit all KSM metrics in KSM v1.
   # emitKsmV1MetricsOnly: false # emit only the KSM metrics missing from KSM v2. Advanced users only.
 
-  # Optional
-  # The metrics exporter is a separate deployment and service (for prometheus scrape auto-discovery)
-  # which emits metrics cost-model relies on. Enabling this deployment also removes the KSM dependency
-  # from the cost-model. If the deployment is not enabled, the metrics will continue to be emitted from
-  # the cost-model.
-  exporter:
-    enabled: false
-    port: 9005
-    # Adds the default Prometheus scrape annotations to the metrics exporter service.
-    # Set to false and use service.annotations (below) to set custom scrape annotations.
-    prometheusScrape: true
-    resources: {}
-      # requests:
-      #  cpu: "200m"
-      #  memory: "55Mi"
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    tolerations: []
-
-    #  - key: "key"
-    #    operator: "Equal|Exists"
-    #    value: "value"
-    #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-    affinity: {}
-
-    service:
-      annotations: {}
-
-    # Service Monitor for Kubecost Metrics
-    serviceMonitor:  # the kubecost included prometheus uses scrapeConfigs and does not support service monitors. The following options assume an existing prometheus that supports serviceMonitors.
-      enabled: false
-      additionalLabels: {}
-      metricRelabelings: []
-      relabelings: []
-    ## PriorityClassName
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
-    priorityClassName: ""
-    additionalLabels: {}
-    nodeSelector: {}
-    extraArgs: []
-
 sigV4Proxy:
   image: public.ecr.aws/aws-observability/aws-sigv4-proxy:latest
   imagePullPolicy: IfNotPresent
   name: aps
@@ -549,9 +521,8 @@
   # - name: AWS_ACCESS_KEY_ID
   #   value: <access_key>
   # - name: AWS_SECRET_ACCESS_KEY
   #   value: <secret_key>
-  # Optional resource requests and limits for the sigV4proxy container.
   resources: {}
 
 kubecostModel:
   image: "gcr.io/kubecost1/cost-model"
@@ -559,17 +530,14 @@
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for cost-model.
   # fullImageName:
 
+  # Log level for the cost model container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
+  logLevel: info
+
   # securityContext:
   #   readOnlyRootFilesystem: true
 
-  # Build local cost allocation cache
-  warmCache: false
-  # Run allocation ETL pipelines
-  etl: true
-  # Enable the ETL filestore backing storage
-  etlFileStoreEnabled: true
   # The total number of days the ETL pipelines will build
   # Set to 0 to disable daily ETL (not recommended)
   etlDailyStoreDurationDays: 91
   # The total number of hours the ETL pipelines will build
@@ -695,16 +663,13 @@
     # limits:
     #   cpu: "800m"
     #   memory: "256Mi"
 
-  # Define a readiness probe for the Kubecost cost-model container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the Kubecost cost-model container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -712,43 +677,18 @@
   extraArgs: []
 
   # Optional. A list of extra environment variables to be added to the cost-model container.
   # extraEnv:
-  #   - name: LOG_LEVEL
-  #     value: trace
   #   - name: LOG_FORMAT
   #     value: json
   #   # When false, Kubecost will not show Asset costs for local disks physically
   #   # attached to nodes (e.g. ephemeral storage). This needs to be applied to
   #   # each cluster monitored.
   #   - name: ASSET_INCLUDE_LOCAL_DISK_COST
   #     value: "true"
 
-  # creates an ingress directly to the model container, for API access
-  ingress:
-    enabled: false
-    # className: nginx
-    labels:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    annotations:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    paths: ["/"]
-    pathType: ImplementationSpecific
-    hosts:
-      - cost-analyzer-model.local
-    tls: []
-    #  - secretName: cost-analyzer-model-tls
-    #    hosts:
-    #      - cost-analyzer-model.local
   utcOffset: "+00:00"
-  # Optional - add extra ports to the cost-model container. For kubecost development purposes only - not recommended for users.
   extraPorts: []
-    # - name: debug
-    #   port: 40000
-    #   targetPort: 40000
-    #   containerPort: 40000
 
 ## etlUtils is a utility typically used by Enterprise customers transitioning
 ## from v1 to v2 of Kubecost. It translates the data from the "/etl" dir of the
 ## bucket, to the "/federated" dir of the bucket.
@@ -760,8 +700,10 @@
   resources: {}
   env: {}
   nodeSelector: {}
   tolerations: []
+  ## Annotations to be added to etlutils deployment
+  annotations: {}
   affinity: {}
 
 # Basic Kubecost ingress, more examples available at https://docs.kubecost.com/install-and-configure/install/ingress-examples
 ingress:
@@ -782,77 +724,25 @@
   #    hosts:
   #      - cost-analyzer.local
 
 nodeSelector: {}
-
 tolerations: []
-#  - key: "key"
-#    operator: "Equal|Exists"
-#    value: "value"
-#    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
 affinity: {}
-
 topologySpreadConstraints: []
-
-# If true, creates a PriorityClass to be used by the cost-analyzer pod
 priority:
   enabled: false
-  name: ""  # Provide name of existing priority class only. If left blank, upstream chart will create one from default template.
-
-# If true, enable creation of NetworkPolicy resources.
-networkPolicy:
-  enabled: false
-  denyEgress: true  # create a network policy that denies egress from kubecost
-  sameNamespace: true  # Set to true if cost analyzer and prometheus are on the same namespace
-#  namespace: kubecost # Namespace where prometheus is installed
-
-  # Cost-analyzer specific vars using the new template
-  costAnalyzer:
-    enabled: false  # If true, create a network policy for cost-analyzer
-    annotations: {}  # annotations to be added to the network policy
-    additionalLabels: {}  # additional labels to be added to the network policy
-    # Examples rules:
-    # ingressRules:
-    #   - selectors: # allow ingress from self on all ports
-    #     - podSelector:
-    #         matchLabels:
-    #           app.kubernetes.io/name: cost-analyzer
-    #   - selectors: # allow egress access to prometheus
-    #     - namespaceSelector:
-    #         matchLabels:
-    #           name: prometheus
-    #       podSelector:
-    #         matchLabels:
-    #           app: prometheus
-    #     ports:
-    #       - protocol: TCP
-    #         port: 9090
-    # egressRules:
-    #   - selectors: # restrict egress to inside cluster
-    #     - namespaceSelector: {}
-
-## @param extraVolumes A list of volumes to be added to the pod
-##
+  name: ""
 extraVolumes: []
-## @param extraVolumeMounts A list of volume mounts to be added to the pod
-##
 extraVolumeMounts: []
 
 # Define persistence volume for cost-analyzer, more information at https://docs.kubecost.com/install-and-configure/install/storage
 persistentVolume:
   size: 32Gi
-  dbSize: 32.0Gi
   enabled: true  # Note that setting this to false means configurations will be wiped out on pod restart.
   # storageClass: "-" #
   # existingClaim: kubecost-cost-analyzer # a claim in the same namespace as kubecost
   labels: {}
   annotations: {}
-    # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-  # Enables a separate PV specifically for ETL data. This should be avoided, but
-  # is kept for legacy compatibility.
-  dbPVEnabled: false
 
 service:
   type: ClusterIP
   port: 9090
@@ -873,20 +763,15 @@
 
   rbac:
     create: true  # Create the RBAC resources for Prometheus.
 
-  ## Define serviceAccount names for components. Defaults to component's fully qualified name.
-  ##
   serviceAccounts:
     alertmanager:
       create: true
       name:
     nodeExporter:
       create: true
       name:
-    pushgateway:
-      create: true
-      name:
     server:
       create: true
       name:
       ## Prometheus server ServiceAccount annotations.
@@ -897,9 +782,8 @@
   ##
   # selfsignedCertConfigMapName: ""
 
   imagePullSecrets:
-  # - name: "image-pull-secret"
 
   extraScrapeConfigs: |
     - job_name: kubecost
       honor_labels: true
@@ -939,9 +823,9 @@
         {{- end }}
     ## Enables scraping of NVIDIA GPU metrics via dcgm-exporter. Scrapes all
     ## endpoints which contain "dcgm-exporter" in labels "app",
     ## "app.kubernetes.io/component", or "app.kubernetes.io/name" with a case
-    ## insensitive match.
+    ## insensitive match. The label must be present on the K8s service endpoints and not just pods.
     ## Refs:
     ## https://github.com/NVIDIA/gpu-operator/blob/d4316a415bbd684ce8416a88042305fc1a093aa4/assets/state-dcgm-exporter/0600_service.yaml#L7
     ## https://github.com/NVIDIA/dcgm-exporter/blob/54fd1ca137c66511a87a720390613680b9bdabdd/deployment/templates/service.yaml#L23
     - job_name: kubecost-dcgm-exporter
@@ -961,381 +845,122 @@
 
     ## Provide a full name override for the Prometheus server.
     # fullnameOverride: ""
 
-    ## Prometheus server container name
-    ##
     enabled: true
     name: server
     sidecarContainers:
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## Prometheus server container image
-    ##
     image:
       repository: quay.io/prometheus/prometheus
       tag: v2.55.1
       pullPolicy: IfNotPresent
-
-    ## prometheus server priorityClassName
-    ##
     priorityClassName: ""
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
-    ## Maybe same with Ingress host name
     baseURL: ""
-
-    ## Additional server container environment variables
-    ##
-    ## You specify this manually like you would a raw deployment manifest.
-    ## This means you can bind in environment variables from secrets.
-    ##
-    ## e.g. static environment variable:
-    ##  - name: DEMO_GREETING
-    ##    value: "Hello from the environment"
-    ##
-    ## e.g. secret environment variable:
-    ## - name: USERNAME
-    ##   valueFrom:
-    ##     secretKeyRef:
-    ##       name: mysecret
-    ##       key: username
     env: []
-
     extraFlags:
       - web.enable-lifecycle
-      ## web.enable-admin-api flag controls access to the administrative HTTP API which includes functionality such as
-      ## deleting time series. This is disabled by default.
-      # - web.enable-admin-api
-      ##
-      ## storage.tsdb.no-lockfile flag controls BD locking
-      # - storage.tsdb.no-lockfile
-      ##
-      ## storage.tsdb.wal-compression flag enables compression of the write-ahead log (WAL)
-      # - storage.tsdb.wal-compression
-
-    ## Path to a configuration file on prometheus server container FS
     configPath: /etc/config/prometheus.yml
-
     global:
-      ## How frequently to scrape targets by default
-      ##
       scrape_interval: 1m
-      ## How long until a scrape request times out
-      ##
       scrape_timeout: 60s
-      ## How frequently to evaluate rules
-      ##
       evaluation_interval: 1m
       external_labels:
         cluster_id: cluster-one  # Each cluster should have a unique ID
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
-    ##
     remoteWrite: {}
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read
-    ##
     remoteRead: {}
-
-    ## Additional Prometheus server container arguments
-    ##
     extraArgs:
       query.max-concurrency: 1
       query.max-samples: 100000000
-
-    ## Additional InitContainers to initialize the pod
-    ##
     extraInitContainers: []
-
-    ## Additional Prometheus server Volume mounts
-    ##
     extraVolumeMounts: []
-
-    ## Additional Prometheus server Volumes
-    ##
     extraVolumes: []
-
-    ## Additional Prometheus server hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: certs-dir
-      #   mountPath: /etc/kubernetes/certs
-      #   subPath: ""
-      #   hostPath: /etc/kubernetes/certs
-      #   readOnly: true
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   subPath: ""
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Additional Prometheus server Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: prom-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.server.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/server-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
     ingress:
-      ## If true, Prometheus server Ingress will be created
-      ##
       enabled: false
       # className: nginx
-
-      ## Prometheus server Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## Prometheus server Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## Prometheus server Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - prometheus.domain.com
-      #   - domain.com/prometheus
-
-      ## PathType determines the interpretation of the Path matching
       pathType: "Prefix"
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## Prometheus server Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-server-tls
-      #     hosts:
-      #       - prometheus.domain.com
-
-    ## Server Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for Prometheus server pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, Prometheus server will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## Prometheus server data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## Prometheus server data Persistent Volume annotations
-      ##
       annotations: {}
-        # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-      ## Prometheus server data Persistent Volume existing claim name
-      ## Requires server.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## Prometheus server data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## Prometheus server data Persistent Volume size
-      ##
       size: 32Gi
-
-      ## Prometheus server data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## Prometheus server data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of Prometheus server data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
     emptyDir:
       sizeLimit: ""
-
-    ## Annotations to be added to Prometheus server pods
-    ##
     podAnnotations: {}
-      # iam.amazonaws.com/role: prometheus
-
-    ## Annotations to be added to the Prometheus Server deployment
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to Prometheus server pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Prometheus AlertManager configuration
-    ##
     alertmanagers: []
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
       annotations: {}
       labels: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
         servicePort: 80
-
-    ## Prometheus server readiness and liveness probe initial delay and timeout
-    ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
-    ##
     readinessProbeInitialDelay: 5
     readinessProbeTimeout: 3
     readinessProbeFailureThreshold: 3
     readinessProbeSuccessThreshold: 1
     livenessProbeInitialDelay: 5
     livenessProbeTimeout: 3
     livenessProbeFailureThreshold: 3
     livenessProbeSuccessThreshold: 1
-
-    ## Prometheus server resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 500m
-      #   memory: 512Mi
-      # requests:
-      #   cpu: 500m
-      #   memory: 512Mi
-
-    ## Vertical Pod Autoscaler config
-    ## Ref: https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
     verticalAutoscaler:
-      ## If true a VPA object will be created for the controller (either StatefulSet or Deployment, based on above configs)
       enabled: false
       ## Optional. Defaults to "Auto" if not specified.
       # updateMode: "Auto"
       ## Mandatory. Without, VPA will not be created.
       # containerPolicies:
       # - containerName: 'prometheus-server'
-
-    ## Security context to be added to server pods
-    ##
     securityContext: {}
-      # runAsUser: 1001
-      # runAsNonRoot: true
-      # runAsGroup: 1001
-      # fsGroup: 1001
-
     containerSecurityContext: {}
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-      # nodePort: ""
-
-      ## List of IP addresses at which the Prometheus server service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       sessionAffinity: None
       type: ClusterIP
-
-      ## Enable gRPC port on service to allow auto discovery with thanos-querier
       gRPC:
         enabled: false
         servicePort: 10901
-        # nodePort: 10901
-
-      ## If using a statefulSet (statefulSet.enabled=true), configure the
-      ## service to connect to a specific replica to have a consistent view
-      ## of the data.
       statefulsetReplica:
         enabled: false
         replica: 0
-
-    ## Prometheus server pod termination grace period
-    ##
     terminationGracePeriodSeconds: 300
 
     ## Prometheus data retention period (default if not specified is 97 hours)
     ##
@@ -1366,292 +991,92 @@
     # retentionSize: should be significantly greater than the storage used in the number of hours set in etlHourlyStoreDurationHours
 
   # Install Prometheus Alert Manager
   alertmanager:
-    ## If false, alertmanager will not be installed
-    ##
     enabled: false
-
     ## Provide a full name override for Prometheus alertmanager.
     # fullnameOverride: ""
-
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## alertmanager container name
-    ##
     name: alertmanager
-
-    ## alertmanager container image
-    ##
     image:
       repository: quay.io/prometheus/alertmanager
       tag: v0.27.0
       pullPolicy: IfNotPresent
-
-    ## alertmanager priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Additional alertmanager container arguments
-    ##
     extraArgs: {}
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
     baseURL: "http://localhost:9093"
-
-    ## Additional alertmanager container environment variable
-    ## For instance to add a http_proxy
-    ##
     extraEnv: {}
-
-    ## Additional alertmanager Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: alertmanager-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.alertmanager.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
-    ## The name of a secret in the same kubernetes namespace which contains the Alertmanager config
-    ## Defining configFromSecret will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configFromSecret: ""
-
-    ## The configuration file name to be loaded to alertmanager
-    ## Must match the key within configuration loaded from ConfigMap/Secret
-    ##
     configFileName: alertmanager.yml
-
     ingress:
-      ## If true, alertmanager Ingress will be created
-      ##
       enabled: false
-
-      ## alertmanager Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## alertmanager Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## alertmanager Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - alertmanager.domain.com
-      #   - domain.com/alertmanager
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## alertmanager Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - alertmanager.domain.com
-
-    ## Alertmanager Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for alertmanager scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for alertmanager pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, alertmanager will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## alertmanager data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## alertmanager data Persistent Volume Claim annotations
-      ##
       annotations: {}
-
-      ## alertmanager data Persistent Volume existing claim name
-      ## Requires alertmanager.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## alertmanager data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## alertmanager data Persistent Volume size
-      ##
       size: 2Gi
-
-      ## alertmanager data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## alertmanager data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of alertmanager data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
-    ## Annotations to be added to alertmanager pods
-    ##
     podAnnotations: {}
-      ## Tell prometheus to use a specific set of alertmanager pods
-      ## instead of all alertmanager pods found in the same namespace
-      ## Useful if you deploy multiple releases within the same namespace
-      ##
-      ## prometheus.io/probe: alertmanager-teamA
-
-    ## Labels to be added to Prometheus AlertManager pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
+      annotations: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
-
-        ## Enabling peer mesh service end points for enabling the HA alert manager
-        ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
         # enableMeshPeer : true
-
         servicePort: 80
-
-    ## alertmanager resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to alertmanager pods
-    ##
     securityContext:
       runAsUser: 1001
       runAsNonRoot: true
       runAsGroup: 1001
       fsGroup: 1001
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-
-      ## Enabling peer mesh service end points for enabling the HA alert manager
-      ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
       # enableMeshPeer : true
-
-      ## List of IP addresses at which the alertmanager service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       # nodePort: 30000
       sessionAffinity: None
       type: ClusterIP
 
-    # Define a custom scheduler for Alertmanager pods
-    # schedulerName: default-scheduler
-
-  ## alertmanager ConfigMap entries
-  ##
   alertmanagerFiles:
     alertmanager.yml:
       global: {}
-        # slack_api_url: ''
-
       receivers:
         - name: default-receiver
-          # slack_configs:
-          #  - channel: '@you'
-          #    send_resolved: true
-
       route:
         group_wait: 10s
         group_interval: 5m
         receiver: default-receiver
@@ -1659,87 +1084,32 @@
 
   ## Monitors ConfigMap changes and POSTs to a URL
   configmapReload:
     prometheus:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
-
-      ## configmap-reload container securityContext
       containerSecurityContext: {}
 
     alertmanager:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
 
-  # node-export must be disabled if there is an existing daemonset: https://guide.kubecost.com/hc/en-us/articles/4407601830679-Troubleshoot-Install#a-name-node-exporter-a-issue-failedscheduling-kubecost-prometheus-node-exporter
   nodeExporter:
     ## If false, node-exporter will not be installed.
     ## This is disabled by default in Kubecost 2.0, though it can be enabled as needed.
     ##
@@ -1747,346 +1117,59 @@
 
     ## Provide a full name override for node exporter.
     # fullnameOverride: ""
 
-    ## If true, node-exporter pods share the host network namespace
-    ##
     hostNetwork: true
-
-    ## If true, node-exporter pods share the host PID namespace
-    ##
     hostPID: true
-
-    ## node-exporter dns policy
-    ##
     dnsPolicy: ClusterFirstWithHostNet
-
-    ## node-exporter container name
-    ##
     name: node-exporter
-
-    ## node-exporter container image
-    ##
     image:
       repository: prom/node-exporter
       tag: v1.8.2
       pullPolicy: IfNotPresent
-
-    ## node-exporter priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Custom Update Strategy
-    ##
     updateStrategy:
       type: RollingUpdate
-
-    ## Additional node-exporter container arguments
-    ##
     extraArgs: {}
-
-    ## Additional node-exporter hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: textfile-dir
-      #   mountPath: /srv/txt_collector
-      #   hostPath: /var/lib/node-exporter
-      #   readOnly: true
-      #   mountPropagation: HostToContainer
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Set a custom affinity for node-exporter
-    ##
     # affinity:
-
-    ## Node tolerations for node-exporter scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for node-exporter pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Annotations to be added to node-exporter pods
-    ##
     podAnnotations: {}
-
-    ## Annotations to be added to the node-exporter DaemonSet
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to node-exporter pods
-    ##
+    annotations: {}
     pod:
       labels: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## node-exporter resource limits & requests
-    ## Ref: https://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 200m
-      #   memory: 50Mi
-      # requests:
-      #   cpu: 100m
-      #   memory: 30Mi
-
-    ## Security context to be added to node-exporter pods
-    ##
     securityContext: {}
-      # runAsUser: 0
-
     service:
       annotations:
         prometheus.io/scrape: "true"
       labels: {}
-
-      # Exposed as a headless service:
-      # https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
       clusterIP: None
-
-      ## List of IP addresses at which the node-exporter service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       hostPort: 9100
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 9100
       type: ClusterIP
 
-  # Install Prometheus Push Gateway.
-  pushgateway:
-    ## If false, pushgateway will not be installed
-    ##
-    enabled: false
-
-    ## Provide a full name override for Prometheus push gateway.
-    # fullnameOverride: ""
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
-    # schedulerName:
-
-    ## pushgateway container name
-    ##
-    name: pushgateway
-
-    ## pushgateway container image
-    ##
-    image:
-      repository: prom/pushgateway
-      tag: v1.9.0
-      pullPolicy: IfNotPresent
-
-    ## pushgateway priorityClassName
-    ##
-    priorityClassName: ""
-
-    ## Additional pushgateway container arguments
-    ##
-    ## for example: persistence.file: /data/pushgateway.data
-    extraArgs: {}
-
-    ingress:
-      ## If true, pushgateway Ingress will be created
-      ##
-      enabled: false
-
-      ## pushgateway Ingress annotations
-      ##
-      annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## pushgateway Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
-      hosts: []
-      #   - pushgateway.domain.com
-      #   - domain.com/pushgateway
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
-      extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## pushgateway Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
-      tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - pushgateway.domain.com
-
-    ## Node tolerations for pushgateway scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
-    tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for pushgateway pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
-    nodeSelector: {}
-
-    ## Annotations to be added to pushgateway pods
-    ##
-    podAnnotations: {}
-
-    replicaCount: 1
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
-    podDisruptionBudget:
-      enabled: false
-      maxUnavailable: 1
-
-    ## pushgateway resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
-    resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to push-gateway pods
-    ##
-    securityContext:
-      runAsUser: 1001
-      runAsNonRoot: true
-
-    service:
-      annotations:
-        prometheus.io/probe: pushgateway
-      labels: {}
-      clusterIP: ""
-
-      ## List of IP addresses at which the pushgateway service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
-      externalIPs: []
-
-      loadBalancerIP: ""
-      loadBalancerSourceRanges: []
-      servicePort: 9091
-      type: ClusterIP
-
-    strategy:
-      type: Recreate
-      rollingUpdate: null
-
-
-    persistentVolume:
-      ## If true, pushgateway will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
-      enabled: true
-
-      ## pushgateway data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
-      accessModes:
-        - ReadWriteOnce
-
-      ## pushgateway data Persistent Volume Claim annotations
-      ##
-      annotations: {}
-
-      ## pushgateway data Persistent Volume existing claim name
-      ## Requires pushgateway.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
-      existingClaim: ""
-
-      ## pushgateway data Persistent Volume mount root path
-      ##
-      mountPath: /data
-
-      ## pushgateway data Persistent Volume size
-      ##
-      size: 2Gi
-
-      ## pushgateway data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
-      # storageClass: "-"
-
-      ## pushgateway data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
-      # volumeBindingMode: ""
-
-      ## Subdirectory of pushgateway data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
-      subPath: ""
-
   serverFiles:
     ## Alerts configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
     alerting_rules.yml: {}
-    # groups:
-    #   - name: Instances
-    #     rules:
-    #       - alert: InstanceDown
-    #         expr: up == 0
-    #         for: 5m
-    #         labels:
-    #           severity: page
-    #         annotations:
-    #           description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
-    #           summary: 'Instance {{ $labels.instance }} down'
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use alerting_rules.yml
-    alerts: {}
 
     ## Records configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/
     recording_rules.yml: {}
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use recording_rules.yml
 
     prometheus.yml:
       rule_files:
         - /etc/config/recording_rules.yml
         - /etc/config/alerting_rules.yml
-      ## Below two files are DEPRECATED will be removed from this default values file
-        - /etc/config/rules
-        - /etc/config/alerts
 
       scrape_configs:
         - job_name: prometheus
           static_configs:
@@ -2098,9 +1181,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes-cadvisor'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2159,9 +1241,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2252,21 +1333,8 @@
           metric_relabel_configs:
             - source_labels: [__name__]
               regex: (container_cpu_allocation|container_cpu_usage_seconds_total|container_fs_limit_bytes|container_fs_writes_bytes_total|container_gpu_allocation|container_memory_allocation_bytes|container_memory_usage_bytes|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|DCGM_FI_DEV_GPU_UTIL|deployment_match_labels|kube_daemonset_status_desired_number_scheduled|kube_daemonset_status_number_ready|kube_deployment_spec_replicas|kube_deployment_status_replicas|kube_deployment_status_replicas_available|kube_job_status_failed|kube_namespace_annotations|kube_namespace_labels|kube_node_info|kube_node_labels|kube_node_status_allocatable|kube_node_status_allocatable_cpu_cores|kube_node_status_allocatable_memory_bytes|kube_node_status_capacity|kube_node_status_capacity_cpu_cores|kube_node_status_capacity_memory_bytes|kube_node_status_condition|kube_persistentvolume_capacity_bytes|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_limits_cpu_cores|kube_pod_container_resource_limits_memory_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_requests_cpu_cores|kube_pod_container_resource_requests_memory_bytes|kube_pod_container_status_restarts_total|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_labels|kube_pod_owner|kube_pod_status_phase|kube_replicaset_owner|kube_statefulset_replicas|kube_statefulset_status_replicas|kubecost_cluster_info|kubecost_cluster_management_cost|kubecost_cluster_memory_working_set_bytes|kubecost_load_balancer_cost|kubecost_network_internet_egress_cost|kubecost_network_region_egress_cost|kubecost_network_zone_egress_cost|kubecost_node_is_spot|kubecost_pod_network_egress_bytes_total|node_cpu_hourly_cost|node_cpu_seconds_total|node_disk_reads_completed|node_disk_reads_completed_total|node_disk_writes_completed|node_disk_writes_completed_total|node_filesystem_device_error|node_gpu_count|node_gpu_hourly_cost|node_memory_Buffers_bytes|node_memory_Cached_bytes|node_memory_MemAvailable_bytes|node_memory_MemFree_bytes|node_memory_MemTotal_bytes|node_network_transmit_bytes_total|node_ram_hourly_cost|node_total_hourly_cost|pod_pvc_allocation|pv_hourly_cost|service_selector_labels|statefulSet_match_labels|kubecost_pv_info|up)
               action: keep
-
-
-  #  prometheus.yml: # Sample block -- enable if using an in cluster durable store.
-  #      remote_write:
-  #        - url: "http://pgprometheus-adapter:9201/write"
-  #          write_relabel_configs:
-  #            - source_labels: [__name__]
-  #              regex: 'container_.*_allocation|container_.*_allocation_bytes|.*_hourly_cost|kube_pod_container_resource_requests{resource="memory", unit="byte"}|container_memory_working_set_bytes|kube_pod_container_resource_requests{resource="cpu", unit="core"}|kube_pod_container_resource_requests|pod_pvc_allocation|kube_namespace_labels|kube_pod_labels'
-  #              action: keep
-  #          queue_config:
-  #            max_samples_per_send: 1000
-        # remote_read:
-        #  - url: "http://pgprometheus-adapter:9201/read"
     rules:
       groups:
         - name: CPU
           rules:
@@ -2307,13 +1375,10 @@
     #   regex: (.+)\d+
     #   target_label: dc
 
   networkPolicy:
-    ## Enable creation of NetworkPolicy resources.
-    ##
     enabled: false
 
-
 ## Optional daemonset to more accurately attribute network costs to the correct workload
 ## https://docs.kubecost.com/install-and-configure/advanced-configuration/network-costs-configuration
 networkCosts:
   enabled: false
@@ -2332,14 +1397,15 @@
   # Traffic Logging will enable logging the top 5 destinations for each source
   # every 30 minutes.
   trafficLogging: true
 
+  # Log level for the network cost containers. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # Port will set both the containerPort and hostPort to this value.
   # These must be identical due to network-costs being run on hostNetwork
   port: 3001
-  # this daemonset can use significant resources on large clusters: https://guide.kubecost.com/hc/en-us/articles/4407595973527-Network-Traffic-Cost-Allocation
+  # this daemonset can use significant resources on large clusters: https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui/cost-allocation/network-allocation
   resources:
     limits:  # remove the limits by setting cpu: null
       cpu: 500m  # can be less, will depend on cluster size
       # memory: it is not recommended to set a memory limit
@@ -2410,75 +1476,41 @@
       #    ips:
       #      - "15.128.15.2"
       #      - "20.0.0.0/8"
 
-  ## Node tolerations for server scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
   tolerations: []
-  #  - key: "key"
-  #    operator: "Equal|Exists"
-  #    value: "value"
-  #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
   affinity: {}
-
   service:
     annotations: {}
     labels: {}
-
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  ## PodMonitor
-  ## Allows scraping of network metrics from a dedicated prometheus operator setup
   podMonitor:
     enabled: false
     additionalLabels: {}
-  # match the default extraScrapeConfig
   additionalLabels: {}
   nodeSelector: {}
+  # Annotations to be added to network cost daemonset template and pod template annotations
   annotations: {}
   healthCheckProbes: {}
-    # readinessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
-    # livenessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
   additionalSecurityContext: {}
-    # readOnlyRootFilesystem: true
 
 ## Kubecost Deployment Configuration
 ## Used for HA mode in Business & Enterprise tier
 ##
 kubecostDeployment:
   replicas: 1
-  # deploymentStrategy:
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
   labels: {}
   annotations: {}
 
-
 ## Kubecost Forecasting forecasts future cost patterns based on historical
 ## patterns observed by Kubecost.
 forecasting:
   enabled: true
 
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for the forecasting
   # container.
-  # Example: fullImageName: gcr.io/kubecost1/forecasting:v0.0.1
-  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.18
   imagePullPolicy: IfNotPresent
 
   # Resource specification block for the forecasting container.
   resources:
@@ -2494,30 +1526,20 @@
     # -t is the worker timeout which primarily affects model training time;
     # if it is not high enough, training workers may die mid training
     "GUNICORN_CMD_ARGS": "--log-level info -t 1200"
 
-  # Define a priority class for the forecasting Deployment.
   priority:
     enabled: false
     name: ""
-
-  # Define a nodeSelector for the forecasting Deployment.
   nodeSelector: {}
-
-  # Define tolerations for the forecasting Deployment.
   tolerations: []
-
-  # Define Pod affinity for the forecasting Deployment.
+  annotations: {}
   affinity: {}
-
-  # Define a readiness probe for the forecasting container
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the forecasting container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -2545,8 +1567,9 @@
   # Replicas sets the number of Aggregator replicas. It only has an effect if
   # `deployMethod: "statefulset"`
   replicas: 1
 
+  # Log level for the aggregator container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # stagingEmptyDirSizeLimit changes how large the "staging"
   # /var/configs/waterfowl emptyDir is. It only takes effect in StatefulSet
@@ -2673,8 +1696,11 @@
 
   ## Define tolerations for the aggregator pod
   # tolerations: []
 
+  ## Annotations to be added for aggregator deployment or statefulset
+  # annotations: {}
+
   ## Define Pod affinity for the aggregator pod
   # affinity: {}
 
   ## Define extra volumes for the aggregator pod
@@ -2737,9 +1763,8 @@
   jaeger:
     enabled: false
     image: jaegertracing/all-in-one
     imageVersion: latest
-    # containerSecurityContext:
 
   service:
     labels: {}
 
@@ -2785,8 +1810,10 @@
     securityContext: {}
     containerSecurityContext: {}
     nodeSelector: {}
     tolerations: []
+    ## Annotations to be added for diagnostics Deployment.
+    annotations: {}
     affinity: {}
 
 ## Provide a full name override for the diagnostics Deployment.
 # diagnosticsFullnameOverride: ""
@@ -2797,14 +1824,16 @@
   image:
     repository: gcr.io/kubecost1/cluster-controller
     tag: v0.16.9
   imagePullPolicy: IfNotPresent
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Set custom tolerations for the cluster controller.
   tolerations: []
+
+  ## Annotations to be added for cluster controller template
+  annotations: {}
   resources: {}
+  affinity: {}
+  nodeSelector: {}
   actionConfigs:
     # this configures the Kubecost Cluster Turndown action
     # for more details, see documentation at https://github.com/kubecost/cluster-turndown/tree/develop?tab=readme-ov-file#setting-a-turndown-schedule
     clusterTurndown: []
@@ -2950,12 +1979,12 @@
 # initChownDataImage ensures all Kubecost filepath permissions on PV or local storage are set up correctly.
 initChownDataImage: "busybox"  # Supports a fully qualified Docker image, e.g. registry.hub.docker.com/library/busybox:latest
 initChownData:
   resources: {}
-    # requests:
-    #   cpu: "50m"
-    #   memory: "20Mi"
 
+## Kubecost's Bundled Grafana
+## You can access it by visiting http://kubecost.me.com/grafana/
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/custom-grafana
 grafana:
   # namespace_datasources: kubecost # override the default namespace here
   # namespace_dashboards: kubecost # override the default namespace here
   rbac:
@@ -2987,106 +2016,45 @@
   #           prometheusType: Prometheus
   #           prometheusVersion: 2.35.0
   #           timeInterval: 1m
 
-  ## Number of replicas for the Grafana deployment
   replicas: 1
-
-  ## Deployment strategy for the Grafana deployment
   deploymentStrategy: RollingUpdate
-
-  ## Readiness probe for the Grafana deployment
   readinessProbe:
     httpGet:
       path: /api/health
       port: 3000
-
-  ## Liveness probe for the Grafana deployment
   livenessProbe:
     httpGet:
       path: /api/health
       port: 3000
     initialDelaySeconds: 60
     timeoutSeconds: 30
     failureThreshold: 10
-
-  ## Container image settings for the Grafana deployment
   image:
     repository: grafana/grafana
     tag: 11.3.1
     pullPolicy: IfNotPresent
-
-    ## Optionally specify an array of imagePullSecrets.
-    ## Secrets must be manually created in the namespace.
     # pullSecrets:
-    #   - myRegistrKeySecretName
-
-  ## Pod-level security context for the Grafana deployment. Recommended let global defaults take effect.
   securityContext: {}
-    # runAsUser: 472
-    # fsGroup: 472
-
-  ## PriorityClassName for the Grafana deployment
   priorityClassName: ""
 
   ## Container image settings for Grafana initContainer used to download dashboards. Will only be used when dashboards are present.
   downloadDashboardsImage:
     repository: curlimages/curl
     tag: latest
     pullPolicy: IfNotPresent
-
-  ## Pod Annotations for the Grafana deployment
   podAnnotations: {}
-
-  ## Deployment annotations for the Grafana deployment
   annotations: {}
-
-  ## Expose the Grafana service to be accessed from outside the cluster (LoadBalancer service).
-  ## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
   service:
     type: ClusterIP
     port: 80
     annotations: {}
     labels: {}
-
-  ##  This template is not needed and is not supported.
-  ##  It is here for backwards compatibility.
-  ##  Kubecost exposes grafana by default with the
-  ##  top level ingress template under /grafana/
-  ingress:
-    enabled: false
-    annotations: {}
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    labels: {}
-    path: /
-    pathType: Prefix
-    hosts:
-      - chart-example.local
-    tls: []
-    #  - secretName: chart-example-tls
-    #    hosts:
-    #      - chart-example.local
-
-  ## Resource requests and limits for the Grafana deployment
   resources: {}
-  #  limits:
-  #    cpu: 100m
-  #    memory: 128Mi
-  #  requests:
-  #    cpu: 100m
-  #    memory: 128Mi
-
-  ## Node labels for pod assignment of the Grafana deployment
   nodeSelector: {}
-
-  ## Tolerations for pod assignment of the Grafana deployment
   tolerations: []
-
-  ## Affinity for pod assignment of the Grafana deployment
   affinity: {}
-
-  ## Enable persistence using Persistent Volume Claims of the Grafana deployment
   persistence:
     enabled: false
     # storageClassName: default
     # accessModes:
@@ -3094,123 +2062,24 @@
     # size: 10Gi
     # annotations: {}
     # subPath: ""
     # existingClaim:
-
-  ## Admin user for Grafana
   adminUser: admin
-
-  ## Admin password for Grafana
   adminPassword: strongpassword
-
-  ## Use an alternate scheduler for the Grafana deployment
   # schedulerName:
-
-  ## Extra environment variables that will be passed onto Grafana deployment pods
   env: {}
-
-  ## The name of a secret for Grafana in the same Kubernetes namespace which contain values to be added to the environment
-  ## This can be useful for auth tokens, etc
   envFromSecret: ""
-
-  ## Additional Grafana server secret mounts
-  ## Defines additional mounts with secrets. Secrets must be manually created in the namespace.
   extraSecretMounts: []
-    # - name: secret-files
-    #   mountPath: /etc/secrets
-    #   secretName: grafana-secret-files
-    #   readOnly: true
-
-  ## List of Grafana plugins
   plugins: []
-    # - digrich-bubblechart-panel
-    # - grafana-clock-panel
-
-  ## Grafana dashboard providers
-  ## ref: http://docs.grafana.org/administration/provisioning/#dashboards
-  ##
-  ## `path` must be /var/lib/grafana/dashboards/<provider_name>
-  ##
   dashboardProviders: {}
-  #  dashboardproviders.yaml:
-  #    apiVersion: 1
-  #    providers:
-  #    - name: 'default'
-  #      orgId: 1
-  #     folder: ''
-  #      type: file
-  #      disableDeletion: false
-  #      editable: true
-  #      options:
-  #        path: /var/lib/grafana/dashboards/default
-
-  ## Configure Grafana dashboard to import
-  ## NOTE: To use dashboards you must also enable/configure dashboardProviders
-  ## ref: https://grafana.com/dashboards
-  ##
-  ## dashboards per provider, use provider name as key.
-  ##
   dashboards: {}
-  #  default:
-  #    prometheus-stats:
-  #      gnetId: 3662
-  #      revision: 2
-  #      datasource: Prometheus
-
-  ## Reference to external Grafana ConfigMap per provider. Use provider name as key and ConfiMap name as value.
-  ## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
-  ## ConfigMap data example:
-  ##
-  ## data:
-  ##   example-dashboard.json: |
-  ##     RAW_JSON
-  ##
   dashboardsConfigMaps: {}
-  #  default: ""
-
-  ## LDAP Authentication for Grafana can be enabled with the following values on grafana.ini
-  ## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
-    # auth.ldap:
-    #   enabled: true
-    #   allow_sign_up: true
-    #   config_file: /etc/grafana/ldap.toml
-
-  ## Grafana's LDAP configuration
-  ## Templated by the template in _helpers.tpl
-  ## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
-  ## ref: http://docs.grafana.org/installation/ldap/#configuration
-  ldap:
-    # `existingSecret` is a reference to an existing secret containing the ldap configuration
-    # for Grafana in a key `ldap-toml`.
-    existingSecret: ""
-    # `config` is the content of `ldap.toml` that will be stored in the created secret
-    config: ""
-    # config: |-
-    #   verbose_logging = true
-
-    #   [[servers]]
-    #   host = "my-ldap-server"
-    #   port = 636
-    #   use_ssl = true
-    #   start_tls = false
-    #   ssl_skip_verify = false
-    #   bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
-
-  ## Grafana's SMTP configuration
-  ## NOTE: To enable, grafana.ini must be configured with smtp.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#smtp
-  smtp:
-    # `existingSecret` is a reference to an existing secret containing the smtp configuration
-    # for Grafana in keys `user` and `password`.
-    existingSecret: ""
-
   ## Grafana sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
   ## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
   sidecar:
     image:
       repository: ghcr.io/kiwigrid/k8s-sidecar
-      tag: 1.28.0
+      tag: 1.28.1
       pullPolicy: IfNotPresent
     resources: {}
     dashboards:
       enabled: true
@@ -3226,9 +2095,8 @@
       enabled: false
       error_throttle_sleep: 0
       # label that the configmaps with datasources are marked with
       label: grafana_datasource
-
   ## Grafana's primary configuration
   ## NOTE: values in map will be converted to ini format
   ## ref: http://docs.grafana.org/installation/configuration/
   ##
@@ -3256,21 +2124,15 @@
 
 serviceAccount:
   create: true  # Set this to false if you're bringing your own service account.
   annotations: {}
-  # name: kc-test
 
 awsstore:
   useAwsStore: false
-  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest  # Name and version of the container image for AWSStore.
+  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest
   createServiceAccount: false
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Use a custom nodeSelector for AWSStore.
   nodeSelector: {}
-    # kubernetes.io/arch: amd64
-  ## Annotations for the AWSStore ServiceAccount.
   annotations: {}
 
 ## Federated ETL Architecture
 ## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/federated-etl
@@ -3331,9 +2193,9 @@
 #       address: http://cluster-a.kubecost.com:9090
 #       # Optional authentication credentials - only basic auth is currently supported.
 #       auth:
 #         type: basic
-#         # Secret name should be a secret formatted based on: https://github.com/kubecost/docs/blob/main/ingress-examples.md
+#         # Secret name should be a secret formatted based on: https://github.com/kubecost/poc-common-configurations/tree/main/ingress-examples
 #         secretName: cluster-a-auth
 #         # Or pass auth directly as base64 encoded user:pass
 #         data: YWRtaW46YWRtaW4=
 #         # Or user and pass directly
@@ -3369,10 +2231,10 @@
 #   gpuLabel: gpu
 #   gpuLabelValue: true
 #   alibabaServiceKeyName: ""
 #   alibabaServiceKeyPassword: ""
-#   awsServiceKeyName: ACCESSKEYID
-#   awsServiceKeyPassword:  fakepassword # Only use if your values.yaml are stored encrypted. Otherwise provide an existing secret via serviceKeySecretName
+#   awsServiceKeyName: ""
+#   awsServiceKeyPassword: ""
 #   awsSpotDataRegion: us-east-1
 #   awsSpotDataBucket: spot-data-feed-s3-bucket
 #   awsSpotDataPrefix: dev
 #   athenaProjectID: "530337586277" # The AWS AccountID where the Athena CUR is. Generally your masterpayer account
@@ -3551,4 +2413,8 @@
 #             host: kubecost.kubecost.svc.cluster.local
 #             port:
 #               number: 80
 
+# -- Optional override for the image used for the basic health test container
+# basicHealth:
+#   fullImageName: alpine/k8s:1.26.9
+

Copy link
Contributor

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 45f899ca0f060cb78b76717b768816a257756505a52b46a72a552cbed367f9ce
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LW1hbmFnZXIuaW8vY2x1c3Rlci1pc3N1ZXIiOiJsZXRzZW5jcnlwdC1zdGFnaW5nIn0sImNsYXNzTmFtZSI6Im5naW54IiwiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJkZXBsb3ltZW50QW5ub3RhdGlvbnMiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJhbGVydHMiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9ydWxlcyIsIi9ldGMvY29uZmlnL2FsZXJ0cyJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInB1c2hnYXRld2F5Ijp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicmVwb3J0aW5nIjp7ImVycm9yUmVwb3J0aW5nIjp0cnVlLCJsb2dDb2xsZWN0aW9uIjp0cnVlLCJwcm9kdWN0QW5hbHl0aWNzIjp0cnVlLCJ2YWx1ZXNSZXBvcnRpbmciOnRydWV9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwibm9kZVBvcnQiOnt9LCJwb3J0Ijo5MDkwLCJ0YXJnZXRQb3J0Ijo5MDkwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibG9nTGV2ZWwiOiJpbmZvIiwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCJ9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC4gVGhlIGxhYmVsIG11c3QgYmUgcHJlc2VudCBvbiB0aGUgSzhzIHNlcnZpY2UgZW5kcG9pbnRzIGFuZCBub3QganVzdCBwb2RzLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYW5ub3RhdGlvbnMiOnt9LCJiYXNlVVJMIjoiIiwiY29uZmlnTWFwT3ZlcnJpZGVOYW1lIjoiIiwiY29uZmlnUGF0aCI6Ii9ldGMvY29uZmlnL3Byb21ldGhldXMueW1sIiwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7fSwiZW1wdHlEaXIiOnsic2l6ZUxpbWl0IjoiIn0sImVuYWJsZWQiOnRydWUsImVudiI6W10sImV4dHJhQXJncyI6eyJxdWVyeS5tYXgtY29uY3VycmVuY3kiOjEsInF1ZXJ5Lm1heC1zYW1wbGVzIjoxMDAwMDAwMDB9LCJleHRyYUNvbmZpZ21hcE1vdW50cyI6W10sImV4dHJhRmxhZ3MiOlsid2ViLmVuYWJsZS1saWZlY3ljbGUiXSwiZXh0cmFIb3N0UGF0aE1vdW50cyI6W10sImV4dHJhSW5pdENvbnRhaW5lcnMiOltdLCJleHRyYVNlY3JldE1vdW50cyI6W10sImV4dHJhVm9sdW1lTW91bnRzIjpbXSwiZXh0cmFWb2x1bWVzIjpbXSwiZ2xvYmFsIjp7ImV2YWx1YXRpb25faW50ZXJ2YWwiOiIxbSIsImV4dGVybmFsX2xhYmVscyI6eyJjbHVzdGVyX2lkIjoic3gtY25wLW9zcyJ9LCJzY3JhcGVfaW50ZXJ2YWwiOiIxbSIsInNjcmFwZV90aW1lb3V0IjoiNjBzIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoicXVheS5pby9wcm9tZXRoZXVzL3Byb21ldGhldXMiLCJ0YWciOiJ2Mi41NS4xIn0sImxpdmVuZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJsaXZlbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJsaXZlbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwibGl2ZW5lc3NQcm9iZVRpbWVvdXQiOjMsIm5hbWUiOiJzZXJ2ZXIiLCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFjY2Vzc01vZGVzIjpbIlJlYWRXcml0ZU9uY2UiXSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJleGlzdGluZ0NsYWltIjoiIiwibW91bnRQYXRoIjoiL2RhdGEiLCJzaXplIjoiMzJHaSIsInN1YlBhdGgiOiIifSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwb2RMYWJlbHMiOnt9LCJwcmVmaXhVUkwiOiIiLCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInJlYWRpbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywicmVhZGluZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsInJlYWRpbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwicmVhZGluZXNzUHJvYmVUaW1lb3V0IjozLCJyZW1vdGVSZWFkIjp7fSwicmVtb3RlV3JpdGUiOnt9LCJyZXBsaWNhQ291bnQiOjEsInJlc291cmNlcyI6e30sInJldGVudGlvbiI6Ijk3aCIsInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJjbHVzdGVySVAiOiIiLCJleHRlcm5hbElQcyI6W10sImxhYmVscyI6e30sImxvYWRCYWxhbmNlcklQIjoiIiwibG9hZEJhbGFuY2VyU291cmNlUmFuZ2VzIjpbXSwic2VydmljZVBvcnQiOjgwLCJzZXNzaW9uQWZmaW5pdHkiOiJOb25lIiwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOjMwMCwidG9sZXJhdGlvbnMiOltdfSwic2VydmVyRmlsZXMiOnsiYWxlcnRpbmdfcnVsZXMueW1sIjp7fSwicHJvbWV0aGV1cy55bWwiOnsicnVsZV9maWxlcyI6WyIvZXRjL2NvbmZpZy9yZWNvcmRpbmdfcnVsZXMueW1sIiwiL2V0Yy9jb25maWcvYWxlcnRpbmdfcnVsZXMueW1sIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-17 19:43:02.257454950 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-17 19:42:35.937221795 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-17 19:43:02.257454950 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-17 19:42:35.937221795 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-17 19:43:02.259454966 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-17 19:42:35.939221814 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-17 19:43:02.257454950 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-17 19:42:35.937221795 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-17 19:43:02.258454958 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-17 19:42:35.937221795 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-17 19:43:02.258454958 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-17 19:42:35.938221804 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-17 19:43:02.260454975 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-17 19:42:35.940221823 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-17 19:42:35.801220571 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-17 19:42:35.801220571 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-17 19:42:35.801220571 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-17 19:42:35.801220571 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 3200005267ed0d35ec8656b0c4da50d94bf7156275304458eccd802ce21d54ee
+        checksum/configs: 464ddc3eced704ef4072987b48e0134bc01babb9294f4d818dec7f9eed8943a9
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifSwiZ3JhZmFuYVVSTCI6Imh0dHBzOi8vZ3JhZmFuYS5sYWIuc3V4ZXNzaXQuazhzLmNsb3VkLnVpYmsuYWMuYXQifSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJhZGRpdGlvbmFsU2VjdXJpdHlDb250ZXh0Ijp7fSwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImNvbmZpZyI6eyJkZXN0aW5hdGlvbnMiOnsiY3Jvc3MtcmVnaW9uIjpbXSwiZGlyZWN0LWNsYXNzaWZpY2F0aW9uIjpbXSwiaW4tcmVnaW9uIjpbXSwiaW4tem9uZSI6WyIxMjcuMC4wLjAvOCIsIjE2OS4yNTQuMC4wLzE2IiwiMTAuMC4wLjAvOCIsIjE3Mi4xNi4wLjAvMTIiLCIxOTIuMTY4LjAuMC8xNiJdLCJpbnRlcm5ldCI6W119LCJzZXJ2aWNlcyI6eyJhbWF6b24td2ViLXNlcnZpY2VzIjp0cnVlLCJhenVyZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZSwiZ29vZ2xlLWNsb3VkLXNlcnZpY2VzIjp0cnVlfX0sImVuYWJsZWQiOnRydWUsImV4dHJhQXJncyI6W10sImhlYWx0aENoZWNrUHJvYmVzIjp7fSwiaW1hZ2UiOnsicmVwb3NpdG9yeSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbmV0d29yay1jb3N0cyIsInRhZyI6InYwLjE3LjYifSwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibG9nTGV2ZWwiOiJpbmZvIiwibm9kZVNlbGVjdG9yIjp7fSwicG9ydCI6MzAwMSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJwcm9tZXRoZXVzU2NyYXBlIjpmYWxzZSwicmVzb3VyY2VzIjp7ImxpbWl0cyI6eyJjcHUiOiI1MDBtIn0sInJlcXVlc3RzIjp7ImNwdSI6IjUwbSIsIm1lbW9yeSI6IjIwTWkifX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9fSwidG9sZXJhdGlvbnMiOltdLCJ0cmFmZmljTG9nZ2luZyI6dHJ1ZSwidXBkYXRlU3RyYXRlZ3kiOnsidHlwZSI6IlJvbGxpbmdVcGRhdGUifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJwcm9tZXRoZXVzUnVsZSI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNlcnZpY2VNb25pdG9yIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJuZXR3b3JrQ29zdHMiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWUsImludGVydmFsIjoiMW0iLCJtZXRyaWNSZWxhYmVsaW5ncyI6W10sInJlbGFiZWxpbmdzIjpbXSwic2NyYXBlVGltZW91dCI6IjEwcyJ9LCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJzZWN1cml0eUNvbnRleHQiOnsiZnNHcm91cCI6MTAwMSwiZnNHcm91cENoYW5nZVBvbGljeSI6Ik9uUm9vdE1pc21hdGNoIiwicnVuQXNHcm91cCI6MTAwMSwicnVuQXNOb25Sb290Ijp0cnVlLCJydW5Bc1VzZXIiOjEwMDEsInNlY2NvbXBQcm9maWxlIjp7InR5cGUiOiJSdW50aW1lRGVmYXVsdCJ9fX0sImdyYWZhbmEiOnsiYWRtaW5QYXNzd29yZCI6InN0cm9uZ3Bhc3N3b3JkIiwiYWRtaW5Vc2VyIjoiYWRtaW4iLCJhZmZpbml0eSI6e30sImFubm90YXRpb25zIjp7fSwiZGFzaGJvYXJkUHJvdmlkZXJzIjp7fSwiZGFzaGJvYXJkcyI6e30sImRhc2hib2FyZHNDb25maWdNYXBzIjp7fSwiZGVwbG95bWVudFN0cmF0ZWd5IjoiUm9sbGluZ1VwZGF0ZSIsImRvd25sb2FkRGFzaGJvYXJkc0ltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY3VybGltYWdlcy9jdXJsIiwidGFnIjoibGF0ZXN0In0sImVudiI6e30sImVudkZyb21TZWNyZXQiOiIiLCJleHRyYVNlY3JldE1vdW50cyI6W10sImdyYWZhbmEuaW5pIjp7ImFuYWx5dGljcyI6eyJjaGVja19mb3JfdXBkYXRlcyI6dHJ1ZX0sImF1dGguYW5vbnltb3VzIjp7ImVuYWJsZWQiOnRydWUsIm9yZ19uYW1lIjoiTWFpbiBPcmcuIiwib3JnX3JvbGUiOiJFZGl0b3IifSwiZ3JhZmFuYV9uZXQiOnsidXJsIjoiaHR0cHM6Ly9ncmFmYW5hLm5ldCJ9LCJsb2ciOnsibW9kZSI6ImNvbnNvbGUifSwicGF0aHMiOnsiZGF0YSI6Ii92YXIvbGliL2dyYWZhbmEvZGF0YSIsImxvZ3MiOiIvdmFyL2xvZy9ncmFmYW5hIiwicGx1Z2lucyI6Ii92YXIvbGliL2dyYWZhbmEvcGx1Z2lucyIsInByb3Zpc2lvbmluZyI6Ii9ldGMvZ3JhZmFuYS9wcm92aXNpb25pbmcifSwic2VydmVyIjp7InJvb3RfdXJsIjoiJShwcm90b2NvbClzOi8vJShkb21haW4pczolKGh0dHBfcG9ydClzL2dyYWZhbmEiLCJzZXJ2ZV9mcm9tX3N1Yl9wYXRoIjpmYWxzZX19LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdyYWZhbmEvZ3JhZmFuYSIsInRhZyI6IjExLjMuMSJ9LCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjEwLCJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjMwfSwibm9kZVNlbGVjdG9yIjp7fSwicGx1Z2lucyI6W10sInBvZEFubm90YXRpb25zIjp7fSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInJlYWRpbmVzc1Byb2JlIjp7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvaGVhbHRoIiwicG9ydCI6MzAwMH19LCJyZXBsaWNhcyI6MSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInBvcnQiOjgwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImNyZWF0ZSI6dHJ1ZSwibmFtZSI6IiJ9LCJzaWRlY2FyIjp7ImRhc2hib2FyZHMiOnsiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlcnJvcl90aHJvdHRsZV9zbGVlcCI6MCwiZm9sZGVyIjoiL3RtcC9kYXNoYm9hcmRzIiwibGFiZWwiOiJncmFmYW5hX2Rhc2hib2FyZCIsImxhYmVsVmFsdWUiOiIxIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ2hjci5pby9raXdpZ3JpZC9rOHMtc2lkZWNhciIsInRhZyI6IjEuMjguMSJ9LCJyZXNvdXJjZXMiOnt9fSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sImxvZ0xldmVsIjoiaW5mbyIsIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAifSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn0sImdyYWZhbmFVUkwiOiJodHRwczovL2dyYWZhbmEubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0In0sIm5ldHdvcmtDb3N0cyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiYWRkaXRpb25hbFNlY3VyaXR5Q29udGV4dCI6e30sImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJjb25maWciOnsiZGVzdGluYXRpb25zIjp7ImNyb3NzLXJlZ2lvbiI6W10sImRpcmVjdC1jbGFzc2lmaWNhdGlvbiI6W10sImluLXJlZ2lvbiI6W10sImluLXpvbmUiOlsiMTI3LjAuMC4wLzgiLCIxNjkuMjU0LjAuMC8xNiIsIjEwLjAuMC4wLzgiLCIxNzIuMTYuMC4wLzEyIiwiMTkyLjE2OC4wLjAvMTYiXSwiaW50ZXJuZXQiOltdfSwic2VydmljZXMiOnsiYW1hem9uLXdlYi1zZXJ2aWNlcyI6dHJ1ZSwiYXp1cmUtY2xvdWQtc2VydmljZXMiOnRydWUsImdvb2dsZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZX19LCJlbmFibGVkIjp0cnVlLCJleHRyYUFyZ3MiOltdLCJoZWFsdGhDaGVja1Byb2JlcyI6e30sImltYWdlIjp7InJlcG9zaXRvcnkiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW5ldHdvcmstY29zdHMiLCJ0YWciOiJ2MC4xNy42In0sImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxvZ0xldmVsIjoiaW5mbyIsIm5vZGVTZWxlY3RvciI6e30sInBvcnQiOjMwMDEsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicHJvbWV0aGV1c1NjcmFwZSI6ZmFsc2UsInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiNTAwbSJ9LCJyZXF1ZXN0cyI6eyJjcHUiOiI1MG0iLCJtZW1vcnkiOiIyME1pIn19LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fX0sInRvbGVyYXRpb25zIjpbXSwidHJhZmZpY0xvZ2dpbmciOnRydWUsInVwZGF0ZVN0cmF0ZWd5Ijp7InR5cGUiOiJSb2xsaW5nVXBkYXRlIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiMjIEVuYWJsZXMgc2NyYXBpbmcgb2YgTlZJRElBIEdQVSBtZXRyaWNzIHZpYSBkY2dtLWV4cG9ydGVyLiBTY3JhcGVzIGFsbFxuIyMgZW5kcG9pbnRzIHdoaWNoIGNvbnRhaW4gXCJkY2dtLWV4cG9ydGVyXCIgaW4gbGFiZWxzIFwiYXBwXCIsXG4jIyBcImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudFwiLCBvciBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIiB3aXRoIGEgY2FzZVxuIyMgaW5zZW5zaXRpdmUgbWF0Y2guIFRoZSBsYWJlbCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIEs4cyBzZXJ2aWNlIGVuZHBvaW50cyBhbmQgbm90IGp1c3QgcG9kcy5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImFubm90YXRpb25zIjp7fSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicHJvbWV0aGV1c1J1bGUiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWV9LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzZXJ2aWNlTW9uaXRvciI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJ2YWwiOiIxbSIsIm1ldHJpY1JlbGFiZWxpbmdzIjpbXSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwicmVsYWJlbGluZ3MiOltdLCJzY3JhcGVUaW1lb3V0IjoiMTBzIn0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -190,9 +173,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -240,9 +223,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -294,9 +277,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-17 19:43:02.119453792 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: network-costs-config
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2024-12-17 19:42:35.801220571 +0000
@@ -7,9 +7,9 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
 spec:
   clusterIP: None
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -7,23 +7,25 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
+  annotations:
 spec:
   updateStrategy:
     type: RollingUpdate
   selector:
     matchLabels:
       app: release-name-network-costs
   template:
     metadata:
+      annotations:
       labels:
         app.kubernetes.io/instance: kubecost
         app.kubernetes.io/name: network-costs
-        helm.sh/chart: cost-analyzer-2.4.3
+        helm.sh/chart: cost-analyzer-2.5.1
         app.kubernetes.io/managed-by: Helm
         app: release-name-network-costs
     spec:
       hostNetwork: true
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2024-12-17 19:43:02.119453792 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-17 19:42:35.801220571 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -4,11 +4,11 @@
 kind: ConfigMap
 metadata:
   name: app-configs
   namespace: default
-  labels: 
+  labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-17 19:42:35.801220571 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2024-12-17 19:43:02.119453792 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
@@ -24,8 +23,7 @@
     matchNames:
       - default
   selector:
     matchLabels:
-      
       app.kubernetes.io/name: cost-analyzer
       app.kubernetes.io/instance: release-name
       app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-17 19:43:02.116453767 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-17 19:42:35.799220553 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-17 19:43:02.119453792 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-17 19:43:02.118453783 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2024-12-17 19:43:02.119453792 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-network-costs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-17 19:43:02.119453792 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-17 19:42:35.802220580 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi

Copy link
Contributor

Changes Default Values
diff -U 4 -r out-default-values/target/kubecost_cost-analyzer_default-values.out out-default-values/pr/kubecost_cost-analyzer_default-values.out
--- out-default-values/target/kubecost_cost-analyzer_default-values.out	2024-12-31 06:35:45.623602882 +0000
+++ out-default-values/pr/kubecost_cost-analyzer_default-values.out	2024-12-31 06:35:17.398119873 +0000
@@ -2,11 +2,12 @@
   # zone: cluster.local (use only if your DNS server doesn't live in the same zone as kubecost)
   prometheus:
     enabled: true  # Kubecost depends on Prometheus data, it is not optional. When enabled: false, Prometheus will not be installed and you must configure your own Prometheus to scrape kubecost as well as provide the fqdn below. -- Warning: Before changing this setting, please read to understand the risks https://docs.kubecost.com/install-and-configure/install/custom-prom
     fqdn: http://cost-analyzer-prometheus-server.default.svc  # example address of a prometheus to connect to. Include protocol (http:// or https://) Ignored if enabled: true
-    # insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
+    insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
     # queryServiceBasicAuthSecretName: dbsecret # kubectl create secret generic dbsecret -n kubecost --from-file=USERNAME --from-file=PASSWORD
     # queryServiceBearerTokenSecretName: mcdbsecret  # kubectl create secret generic mcdbsecret -n kubecost --from-file=TOKEN
+    kubeRBACProxy: false  # If true, kubecost will use kube-rbac-proxy to authenticate with in cluster Prometheus for openshift
 
   grafana:
     enabled: true  # If false, Grafana will not be installed
     domainName: cost-analyzer-grafana.default.svc  # example grafana domain Ignored if enabled: true
@@ -53,8 +54,10 @@
   # or `global.prometheus.fqdn=http://{{ template "cost-analyzer.fullname" . }}-mimir-proxy.{{ .Release.Namespace }}.svc:8085/prometheus'
   # Learn more at https://grafana.com/docs/mimir/latest/operators-guide/secure/authentication-and-authorization/#without-an-authenticating-reverse-proxy
   mimirProxy:
     enabled: false
+    ## Annotations to be added to the Mimir Proxy deployment template
+    annotations: {}
     name: mimir-proxy
     image: nginxinc/nginx-unprivileged
     port: 8085
     mimirEndpoint: $mimir_endpoint  # Your Mimir query endpoint. If your Mimir query endpoint is http://example.com/prometheus, replace $mimir_endpoint with http://example.com/
@@ -62,11 +65,10 @@
     # basicAuth:
       # username: user
       # password: pwd
 
-  # Azure Monitor Managed Service for Prometheus
-  # See https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/azure-monitor/essentials/prometheus-metrics-overview.md for information
-  # and https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines for more information on setting this up
+  ## Azure Monitor Managed Service for Prometheus
+  ## Ref: https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines
   ammsp:
     enabled: false
     prometheusServerEndpoint: http://localhost:8081/
     remoteWriteService: $<AMMSP_METRICS_INGESTION_ENDPOINT>
@@ -83,76 +85,68 @@
       identityType: userAssigned
       aadClientId: $<AZURE_MANAGED_IDENTITY_CLIENT_ID>
       aadTenantId: $<AZURE_MANAGED_IDENTITY_TENANT_ID>
 
+  ## Kubecost Alerting
+  ## Ref: http://docs.kubecost.com/alerts
   notifications:
-    # Kubecost alerting configuration
-    # Ref: http://docs.kubecost.com/alerts
     # alertConfigs:
-      # frontendUrl: http://localhost:9090 # optional, used for linkbacks
-      # globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Slack alerts
-      # globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Microsoft Teams alerts
-      # globalAlertEmails:
-      #   - [email protected]
-      #   - [email protected]
-      # globalEmailSubject: Custom Subject
-      # Alerts generated by kubecost, about cluster data
-      # alerts:
-        # Daily namespace budget alert on namespace `kubecost`
-        # - type: budget                # supported: budget, recurringUpdate
-        #   threshold: 50               # optional, required for budget alerts
-        #   window: daily               # or 1d
-        #   aggregation: namespace
-        #   filter: kubecost
-        #   ownerContact:               # optional, overrides globalAlertEmails default
-        #     - [email protected]
-        #     - [email protected]
-        #   # optional, used for alert-specific Slack and Microsoft Teams alerts
-        #   slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
-        #   msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX
-
-        # Daily cluster budget alert on cluster `cluster-one`
-        # - type: budget
-        #   threshold: 200.8        # optional, required for budget alerts
-        #   window: daily           # or 1d
-        #   aggregation: cluster
-        #   filter: cluster-one     # does not accept csv
-
-        # Recurring weekly update (weeklyUpdate alert)
-        # - type: recurringUpdate
-        #   window: weekly          # or 7d
-        #   aggregation: namespace
-        #   filter: '*'
-
-        # Recurring weekly namespace update on kubecost namespace
-        # - type: recurringUpdate
-        #   window: weekly # or 7d
-        #   aggregation: namespace
-        #   filter: kubecost
-
-        # Spend Change Alert
-        # - type: spendChange         # change relative to moving avg
-        #   relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
-        #   window: 1d                # accepts ‘d’, ‘h’
-        #   baselineWindow: 30d       # previous window, offset by window
-        #   aggregation: namespace
-        #   filter: kubecost, default # accepts csv
-
-        # Health Score Alert
-        # - type: health              # Alerts when health score changes by a threshold
-        #   window: 10m
-        #   threshold: 5              # Send Alert if health scores changes by 5 or more
-
-        # Kubecost Health Diagnostic
-        # - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
-        #   window: 10m
+    #   frontendUrl: http://localhost:9090  # Optional
+    #   globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalAlertEmails:
+    #     - [email protected]
+    #     - [email protected]
+    #   globalEmailSubject: Custom Subject
+    #   alerts:
+    #     # Daily namespace budget alert on namespace `kubecost`
+    #     - type: budget                # supported: budget, recurringUpdate
+    #       threshold: 50               # optional, required for budget alerts
+    #       window: daily               # or 1d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #       ownerContact:               # optional, overrides globalAlertEmails default
+    #         - [email protected]
+    #         - [email protected]
+    #       slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #       msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #     # Daily cluster budget alert on cluster `cluster-one`
+    #     - type: budget
+    #       threshold: 200.8        # optional, required for budget alerts
+    #       window: daily           # or 1d
+    #       aggregation: cluster
+    #       filter: cluster-one     # does not accept csv
+    #     # Recurring weekly update (weeklyUpdate alert)
+    #     - type: recurringUpdate
+    #       window: weekly          # or 7d
+    #       aggregation: namespace
+    #       filter: '*'
+    #     # Recurring weekly namespace update on kubecost namespace
+    #     - type: recurringUpdate
+    #       window: weekly # or 7d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #     # Spend Change Alert
+    #     - type: spendChange         # change relative to moving avg
+    #       relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
+    #       window: 1d                # accepts ‘d’, ‘h’
+    #       baselineWindow: 30d       # previous window, offset by window
+    #       aggregation: namespace
+    #       filter: kubecost, default # accepts csv
+    #     # Health Score Alert
+    #     - type: health              # Alerts when health score changes by a threshold
+    #       window: 10m
+    #       threshold: 5              # Send Alert if health scores changes by 5 or more
+    #     # Kubecost Health Diagnostic
+    #     - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
+    #       window: 10m
 
     alertmanager:  # Supply an alertmanager FQDN to receive notifications from the app.
       enabled: false  # If true, allow kubecost to write to your alertmanager
       fqdn: http://cost-analyzer-prometheus-server.default.svc  # example fqdn. Ignored if prometheus.enabled: true
 
-    # Set saved Cost Allocation report(s) accessible from /reports
-    # Ref: http://docs.kubecost.com/saved-reports
+  ## Kubecost Saved Reports
+  ## Ref: http://docs.kubecost.com/saved-reports
   savedReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Example Saved Report 0"
@@ -160,35 +154,32 @@
         aggregateBy: "namespace"
         chartDisplay: "category"
         idle: "separate"
         rate: "cumulative"
-        accumulate: false  # daily resolution
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        accumulate: false   # daily resolution
+        filters:            # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "cluster"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: ":"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: ":"   # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "dev"
       - title: "Example Saved Report 1"
         window: "month"
         aggregateBy: "controllerKind"
         chartDisplay: "category"
         idle: "share"
         rate: "monthly"
         accumulate: false
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        filters:              # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "namespace"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: "!:"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: "!:"    # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "kubecost"
       - title: "Example Saved Report 2"
         window: "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z"
         aggregateBy: "service"
         chartDisplay: "category"
         idle: "hide"
         rate: "daily"
         accumulate: true  # entire window resolution
-        filters: []  # if no filters, specify empty array
-
-  # Set saved Asset report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
+        filters: []       # if no filters, specify empty array
   assetReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
     - title: "Example Asset Report 0"
@@ -197,11 +188,8 @@
       accumulate: false  # daily resolution
       filters:
         - property: "cluster"
           value: "cluster-one"
-
-  # Set saved Cloud Cost report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
   cloudCostReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Cloud Cost Report 0"
@@ -214,8 +202,12 @@
 
   podAnnotations: {}
     # iam.amazonaws.com/role: role-arn
 
+  # Annotations to be added for all controllers (StatefulSets, Deployments, DaemonSets)
+  annotations: {}
+    # iam.amazonaws.com/role: role-arn
+
   # Applies these labels to all Deployments, StatefulSets, DaemonSets, and their pod templates.
   additionalLabels: {}
 
   securityContext:
@@ -233,8 +225,25 @@
     capabilities:
       drop:
       - ALL
 
+  # Installs custom CA certificates onto Kubecost pods
+  updateCaTrust:
+    enabled: false  # Set to true to enable the init container for updating CA trust
+    # Security context settings for the init container.
+    securityContext:
+      runAsUser: 0
+      runAsGroup: 0
+      runAsNonRoot: false
+      allowPrivilegeEscalation: false
+      readOnlyRootFilesystem: true
+      seccompProfile:
+        type: RuntimeDefault
+    caCertsSecret: ca-certs-secret  # The name of the Secret containing custom CA certificates to mount to the cost-model container.
+    # caCertsConfig: ca-certs-config  # The name of the ConfigMap containing the CA trust configuration.
+    resources: {}  # Resource requests and limits for the init container.
+    caCertsMountPath: /etc/pki/ca-trust/source/anchors  # The path where the custom CA certificates will be mounted in the init container
+
   # Platforms is a higher-level abstraction for platform-specific values and settings.
   platforms:
     # Deploying to OpenShift (OCP) requires enabling this option.
     openshift:
@@ -242,8 +251,15 @@
       route:
         enabled: false  # Create an OpenShift Route.
         annotations: {}  # Add annotations to the Route.
         # host: kubecost.apps.okd4.example.com  # Add a custom host for your Route.
+
+        # OPTIONAL. The following configs only to be enabled when using a Prometheus instance already installed in the cluster.
+        createMonitoringClusterRoleBinding: false  # Create a ClusterRoleBinding to grant the Kubecost serviceaccount access to query Prometheus.
+        createMonitoringResourceReaderRoleBinding: false  # Create a Role and Role Binding to allow Prometheus to list and watch Kubecost resources.
+        monitoringServiceAccountName: prometheus-k8s  # Name of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+        monitoringServiceAccountNamespace: openshift-monitoring  # Namespace of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+
       # Create Security Context Constraint resources for the DaemonSets requiring additional privileges.
       scc:
         nodeExporter: false  # Creates an SCC for Prometheus Node Exporter. This requires Node Exporter be enabled.
         networkCosts: false  # Creates an SCC for Kubecost network-costs. This requires network-costs be enabled.
@@ -258,18 +274,24 @@
       skipSanityChecks: false  # If true, skip all sanity/existence checks for resources like Secrets.
 
   ## Kubecost Integrations
   ## Ref: https://docs.kubecost.com/integrations
-  ##
   integrations:
+    turbonomic:
+      enabled: false         # Set to true to enable the Turbonomic integration
+      clientId: ""           # Client ID generated from the OAuth Client created
+      clientSecret: ""       # Client Secret generated from the OAuth Client created
+      role: ""               # Role that the OAuth Client was created with (e.g. ADMINISTRATOR, SITE_ADMIN, etc.)
+      host: ""               # URL to your turbonomic API. EG: https://turbonomic.example.com/
+      insecureClient: false  # Do not verify certificate
     postgres:
       enabled: false
-      runInterval: "12h"  # How frequently to run the integration.
-      databaseHost: ""  # REQUIRED. ex: my.postgres.database.azure.com
-      databasePort: ""  # REQUIRED. ex: 5432
-      databaseName: ""  # REQUIRED. ex: postgres
-      databaseUser: ""  # REQUIRED. ex: myusername
-      databasePassword: ""  # REQUIRED. ex: mypassword
+      runInterval: "12h"      # How frequently to run the integration.
+      databaseHost: ""        # REQUIRED. ex: my.postgres.database.azure.com
+      databasePort: ""        # REQUIRED. ex: 5432
+      databaseName: ""        # REQUIRED. ex: postgres
+      databaseUser: ""        # REQUIRED. ex: myusername
+      databasePassword: ""    # REQUIRED. ex: mypassword
       databaseSecretName: ""  # OPTIONAL. Specify your own k8s secret containing the above credentials. Must have key "creds.json".
 
       ## Configure what Postgres table to write to, and what parameters to pass
       ## when querying Kubecost's APIs. Ensure all parameters are enclosed in
@@ -303,8 +325,12 @@
 # nameOverride: ""
 ## Provide a full name override option for the chart.
 # fullnameOverride: ""
 
+## Provide additional labels for the chart.
+# chartLabels:
+#   app.kubernetes.io/name: kubecost-cost-analyzer
+
 ## This flag is only required for users upgrading to a new version of Kubecost.
 ## The flag is used to ensure users are aware of important
 ## (potentially breaking) changes included in the new version.
 ##
@@ -322,79 +348,77 @@
     region: "us-east-1"
     URI: s3://kc-csv-test/pricing_schema.csv  # a valid file URI
     csvAccessCredentials: pricing-schema-access-secret
 
-# SAML integration for user management and RBAC, enterprise key required
-# Ref: https://github.com/kubecost/docs/blob/main/user-management.md
+## Kubecost SAML (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-saml
 saml:
   enabled: false
-  # secretName: "kubecost-authzero"
-  # metadataSecretName: "kubecost-authzero-metadata" # One of metadataSecretName or idpMetadataURL must be set. defaults to metadataURL if set
-  # idpMetadataURL: "https://dev-elu2z98r.auth0.com/samlp/metadata/c6nY4M37rBP0qSO1IYIqBPPyIPxLS8v2"
-  # appRootURL: "http://localhost:9090" # sample URL
-  # authTimeout: 1440 # number of minutes the JWT will be valid
-  # redirectURL: "https://dev-elu2z98r.auth0.com/v2/logout" # callback URL redirected to after logout
-  # audienceURI: "http://localhost:9090" # by convention, the same as the appRootURL, but any string uniquely identifying kubecost to your samp IDP. Optional if you follow the convention
-  # nameIDFormat: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" If your SAML provider requires a specific nameid format
-  # isGLUUProvider: false # An additional URL parameter must be appended for GLUU providers
-  # encryptionCertSecret: "kubecost-saml-cert" # k8s secret where the x509 certificate used to encrypt an Okta saml response is stored
-  # decryptionKeySecret: "kubecost-sank-decryption-key" # k8s secret where the private key associated with the encryptionCertSecret is stored
-  # authSecret: "random-string" # value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
-  # authSecretName: "kubecost-saml-secret" # name of k8s secret where the authSecret will be stored, defaults to "kubecost-saml-secret" if not provided
+  # secretName: ""
+  # metadataSecretName: ""  # One of metadataSecretName or idpMetadataURL must be set. Defaults to idpMetadataURL if set.
+  # idpMetadataURL: ""
+  # appRootURL: ""
+  # authTimeout: 1440  # Number of minutes the JWT will be valid
+  # redirectURL: ""  # Callback URL redirected to after logout
+  # audienceURI: ""  # Usually the same as the appRootURL. Optionally any string uniquely identifying kubecost to your SAML IDP.
+  # nameIDFormat: ""  # If your SAML provider requires a specific nameid format
+  # isGLUUProvider: false  # An additional URL parameter must be appended for GLUU providers
+  # encryptionCertSecret: ""  # K8s secret storing the x509 certificate used to encrypt an Okta SAML response
+  # decryptionKeySecret: ""  # K8s secret storing the private key associated with the encryptionCertSecret
+  # authSecret: ""  # Value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
+  # authSecretName: ""  # Name of K8s secret where the authSecret will be stored. Defaults to "kubecost-saml-secret" if not provided.
   rbac:
     enabled: false
     # groups:
     #   - name: admin
-    #     enabled: false # if admin is disabled, all SAML users will be able to make configuration changes to the kubecost frontend
-    #     assertionName: "http://schemas.auth0.com/userType" # a SAML Assertion, one of whose elements has a value that matches on of the values in assertionValues
+    #     enabled: false  # If admin is disabled, all SAML users will be able to make configuration changes to the Kubecost frontend
+    #     assertionName: ""
     #     assertionValues:
     #       - "admin"
     #       - "superusers"
     #   - name: readonly
-    #     enabled: false # if readonly is disabled, all users authorized on SAML will default to readonly
-    #     assertionName:  "http://schemas.auth0.com/userType"
+    #     enabled: false  # If readonly is disabled, all users authorized on SAML will default to readonly
+    #     assertionName: ""
     #     assertionValues:
     #       - "readonly"
     #   - name: editor
-    #     enabled: true # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
-    #     assertionName: "http://schemas.auth0.com/userType"
+    #     enabled: true  # If editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #     assertionName: ""
     #     assertionValues:
     #       - "editor"
 
+## Kubecost OIDC (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-oidc
 oidc:
   enabled: false
-  clientID: ""  # application/client client_id parameter obtained from provider, used to make requests to server
-  clientSecret: ""  # application/client client_secret parameter obtained from provider, used to make requests to server
-  # secretName: "kubecost-oidc-secret" # k8s secret where clientsecret will be stored
-  # For use to provide a custom OIDC Secret. Overrides the usage of oidc.clientSecret and oidc.secretName.
-  # Should contain the field directly.
-  # Can be created using raw k8s secrets, external secrets, sealed secrets, or any other method.
+  clientID: ""  # Application client_id parameter obtained from provider. Used to make requests to server.
+  clientSecret: ""  # Application/client client_secret parameter obtained from provider. Used to make requests to server.
+  secretName: "kubecost-oidc-secret"  # K8s secret where clientsecret will be stored
   existingCustomSecret:
     enabled: false
-    name: ""  # name of the secret containing the client secret
-
-  # authURL: "https://my.auth.server/authorize" # endpoint for login to auth server
-  # loginRedirectURL: "http://my.kubecost.url/model/oidc/authorize" # Kubecost url configured in provider for redirect after authentication
-  # discoveryURL: "https://my.auth.server/.well-known/openid-configuration" # url for OIDC endpoint discovery
-  skipOnlineTokenValidation: false  # if true, will skip accessing OIDC introspection endpoint for online token verification, and instead try to locally validate JWT claims
-  useClientSecretPost: false  # if true, client secret will specifically only use client_secret_post method, otherwise it will attempt to send the secret in both the header and the body.
-  # hostedDomain: "example.com" # optional, blocks access to the auth domain specified in the hd claim of the provider ID token
+    name: ""  # Name of an existing clientSecret. Overrides the usage of oidc.clientSecret and oidc.secretName.
+  authURL: ""  # Authorization endpoint for your identity provider
+  loginRedirectURL: ""  # Kubecost URL endpoint which handles auth flow
+  discoveryURL: ""  # Your identity provider's endpoint sharing OIDC configuration
+  skipOnlineTokenValidation: false  # If true, validate JWT claims locally
+  useClientSecretPost: false  # If true, only use client_secret_post method. Otherwise attempt to send the secret in both the header and the body.
+  hostedDomain: ""  # Optional, blocks access to the auth domain specified in the hd claim of the provider ID token
   rbac:
     enabled: false
     # groups:
-    #   - name: admin
-    #     enabled: false # if admin is disabled, all authenticated users will be able to make configuration changes to the kubecost frontend
-    #     claimName: "roles" # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
-    #     claimValues: # Kubecost matches these strings with the roles created in your identity provider
+    #   - name: admin  # Admins have permissions to edit Kubecost settings and save reports
+    #     enabled: false
+    #     claimName: "roles"  # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
+    #     claimValues:  # Kubecost matches these strings with the roles created in your identity provider
     #       - "admin"
     #       - "superusers"
-    #   - name: readonly
-    #     enabled: false # if readonly is disabled, all authenticated users will default to readonly
-    #     claimName:  "roles"
+    #   - name: readonly  # Readonly users do not have permissions to edit Kubecost settings or save reports.
+    #     enabled: false
+    #     claimName: "roles"
     #     claimValues:
     #       - "readonly"
-    #   - name: editor
-    #     enabled: false # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #   - name: editor  # Editors have permissions to edit reports/alerts and act as readers otherwise
+    #     enabled: false
     #     claimName: "roles"
     #     claimValues:
     #       - "editor"
 
@@ -435,25 +459,14 @@
   resources:
     requests:
       cpu: "10m"
       memory: "55Mi"
-    # limits:
-    #   cpu: "100m"
-    #   memory: "256Mi"
   deploymentStrategy: {}
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
-
-  # Define a readiness probe for the Kubecost frontend container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
     failureThreshold: 6
-
-  # Define a liveness probe for the Kubecost frontend container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
@@ -495,49 +508,8 @@
   # emitNamespaceAnnotations: false
   # emitKsmV1Metrics: true # emit all KSM metrics in KSM v1.
   # emitKsmV1MetricsOnly: false # emit only the KSM metrics missing from KSM v2. Advanced users only.
 
-  # Optional
-  # The metrics exporter is a separate deployment and service (for prometheus scrape auto-discovery)
-  # which emits metrics cost-model relies on. Enabling this deployment also removes the KSM dependency
-  # from the cost-model. If the deployment is not enabled, the metrics will continue to be emitted from
-  # the cost-model.
-  exporter:
-    enabled: false
-    port: 9005
-    # Adds the default Prometheus scrape annotations to the metrics exporter service.
-    # Set to false and use service.annotations (below) to set custom scrape annotations.
-    prometheusScrape: true
-    resources: {}
-      # requests:
-      #  cpu: "200m"
-      #  memory: "55Mi"
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    tolerations: []
-
-    #  - key: "key"
-    #    operator: "Equal|Exists"
-    #    value: "value"
-    #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-    affinity: {}
-
-    service:
-      annotations: {}
-
-    # Service Monitor for Kubecost Metrics
-    serviceMonitor:  # the kubecost included prometheus uses scrapeConfigs and does not support service monitors. The following options assume an existing prometheus that supports serviceMonitors.
-      enabled: false
-      additionalLabels: {}
-      metricRelabelings: []
-      relabelings: []
-    ## PriorityClassName
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
-    priorityClassName: ""
-    additionalLabels: {}
-    nodeSelector: {}
-    extraArgs: []
-
 sigV4Proxy:
   image: public.ecr.aws/aws-observability/aws-sigv4-proxy:latest
   imagePullPolicy: IfNotPresent
   name: aps
@@ -549,9 +521,8 @@
   # - name: AWS_ACCESS_KEY_ID
   #   value: <access_key>
   # - name: AWS_SECRET_ACCESS_KEY
   #   value: <secret_key>
-  # Optional resource requests and limits for the sigV4proxy container.
   resources: {}
 
 kubecostModel:
   image: "gcr.io/kubecost1/cost-model"
@@ -559,17 +530,14 @@
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for cost-model.
   # fullImageName:
 
+  # Log level for the cost model container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
+  logLevel: info
+
   # securityContext:
   #   readOnlyRootFilesystem: true
 
-  # Build local cost allocation cache
-  warmCache: false
-  # Run allocation ETL pipelines
-  etl: true
-  # Enable the ETL filestore backing storage
-  etlFileStoreEnabled: true
   # The total number of days the ETL pipelines will build
   # Set to 0 to disable daily ETL (not recommended)
   etlDailyStoreDurationDays: 91
   # The total number of hours the ETL pipelines will build
@@ -695,16 +663,13 @@
     # limits:
     #   cpu: "800m"
     #   memory: "256Mi"
 
-  # Define a readiness probe for the Kubecost cost-model container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the Kubecost cost-model container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -712,43 +677,18 @@
   extraArgs: []
 
   # Optional. A list of extra environment variables to be added to the cost-model container.
   # extraEnv:
-  #   - name: LOG_LEVEL
-  #     value: trace
   #   - name: LOG_FORMAT
   #     value: json
   #   # When false, Kubecost will not show Asset costs for local disks physically
   #   # attached to nodes (e.g. ephemeral storage). This needs to be applied to
   #   # each cluster monitored.
   #   - name: ASSET_INCLUDE_LOCAL_DISK_COST
   #     value: "true"
 
-  # creates an ingress directly to the model container, for API access
-  ingress:
-    enabled: false
-    # className: nginx
-    labels:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    annotations:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    paths: ["/"]
-    pathType: ImplementationSpecific
-    hosts:
-      - cost-analyzer-model.local
-    tls: []
-    #  - secretName: cost-analyzer-model-tls
-    #    hosts:
-    #      - cost-analyzer-model.local
   utcOffset: "+00:00"
-  # Optional - add extra ports to the cost-model container. For kubecost development purposes only - not recommended for users.
   extraPorts: []
-    # - name: debug
-    #   port: 40000
-    #   targetPort: 40000
-    #   containerPort: 40000
 
 ## etlUtils is a utility typically used by Enterprise customers transitioning
 ## from v1 to v2 of Kubecost. It translates the data from the "/etl" dir of the
 ## bucket, to the "/federated" dir of the bucket.
@@ -760,8 +700,10 @@
   resources: {}
   env: {}
   nodeSelector: {}
   tolerations: []
+  ## Annotations to be added to etlutils deployment
+  annotations: {}
   affinity: {}
 
 # Basic Kubecost ingress, more examples available at https://docs.kubecost.com/install-and-configure/install/ingress-examples
 ingress:
@@ -782,77 +724,25 @@
   #    hosts:
   #      - cost-analyzer.local
 
 nodeSelector: {}
-
 tolerations: []
-#  - key: "key"
-#    operator: "Equal|Exists"
-#    value: "value"
-#    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
 affinity: {}
-
 topologySpreadConstraints: []
-
-# If true, creates a PriorityClass to be used by the cost-analyzer pod
 priority:
   enabled: false
-  name: ""  # Provide name of existing priority class only. If left blank, upstream chart will create one from default template.
-
-# If true, enable creation of NetworkPolicy resources.
-networkPolicy:
-  enabled: false
-  denyEgress: true  # create a network policy that denies egress from kubecost
-  sameNamespace: true  # Set to true if cost analyzer and prometheus are on the same namespace
-#  namespace: kubecost # Namespace where prometheus is installed
-
-  # Cost-analyzer specific vars using the new template
-  costAnalyzer:
-    enabled: false  # If true, create a network policy for cost-analyzer
-    annotations: {}  # annotations to be added to the network policy
-    additionalLabels: {}  # additional labels to be added to the network policy
-    # Examples rules:
-    # ingressRules:
-    #   - selectors: # allow ingress from self on all ports
-    #     - podSelector:
-    #         matchLabels:
-    #           app.kubernetes.io/name: cost-analyzer
-    #   - selectors: # allow egress access to prometheus
-    #     - namespaceSelector:
-    #         matchLabels:
-    #           name: prometheus
-    #       podSelector:
-    #         matchLabels:
-    #           app: prometheus
-    #     ports:
-    #       - protocol: TCP
-    #         port: 9090
-    # egressRules:
-    #   - selectors: # restrict egress to inside cluster
-    #     - namespaceSelector: {}
-
-## @param extraVolumes A list of volumes to be added to the pod
-##
+  name: ""
 extraVolumes: []
-## @param extraVolumeMounts A list of volume mounts to be added to the pod
-##
 extraVolumeMounts: []
 
 # Define persistence volume for cost-analyzer, more information at https://docs.kubecost.com/install-and-configure/install/storage
 persistentVolume:
   size: 32Gi
-  dbSize: 32.0Gi
   enabled: true  # Note that setting this to false means configurations will be wiped out on pod restart.
   # storageClass: "-" #
   # existingClaim: kubecost-cost-analyzer # a claim in the same namespace as kubecost
   labels: {}
   annotations: {}
-    # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-  # Enables a separate PV specifically for ETL data. This should be avoided, but
-  # is kept for legacy compatibility.
-  dbPVEnabled: false
 
 service:
   type: ClusterIP
   port: 9090
@@ -873,20 +763,15 @@
 
   rbac:
     create: true  # Create the RBAC resources for Prometheus.
 
-  ## Define serviceAccount names for components. Defaults to component's fully qualified name.
-  ##
   serviceAccounts:
     alertmanager:
       create: true
       name:
     nodeExporter:
       create: true
       name:
-    pushgateway:
-      create: true
-      name:
     server:
       create: true
       name:
       ## Prometheus server ServiceAccount annotations.
@@ -897,9 +782,8 @@
   ##
   # selfsignedCertConfigMapName: ""
 
   imagePullSecrets:
-  # - name: "image-pull-secret"
 
   extraScrapeConfigs: |
     - job_name: kubecost
       honor_labels: true
@@ -939,9 +823,9 @@
         {{- end }}
     ## Enables scraping of NVIDIA GPU metrics via dcgm-exporter. Scrapes all
     ## endpoints which contain "dcgm-exporter" in labels "app",
     ## "app.kubernetes.io/component", or "app.kubernetes.io/name" with a case
-    ## insensitive match.
+    ## insensitive match. The label must be present on the K8s service endpoints and not just pods.
     ## Refs:
     ## https://github.com/NVIDIA/gpu-operator/blob/d4316a415bbd684ce8416a88042305fc1a093aa4/assets/state-dcgm-exporter/0600_service.yaml#L7
     ## https://github.com/NVIDIA/dcgm-exporter/blob/54fd1ca137c66511a87a720390613680b9bdabdd/deployment/templates/service.yaml#L23
     - job_name: kubecost-dcgm-exporter
@@ -961,381 +845,122 @@
 
     ## Provide a full name override for the Prometheus server.
     # fullnameOverride: ""
 
-    ## Prometheus server container name
-    ##
     enabled: true
     name: server
     sidecarContainers:
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## Prometheus server container image
-    ##
     image:
       repository: quay.io/prometheus/prometheus
       tag: v2.55.1
       pullPolicy: IfNotPresent
-
-    ## prometheus server priorityClassName
-    ##
     priorityClassName: ""
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
-    ## Maybe same with Ingress host name
     baseURL: ""
-
-    ## Additional server container environment variables
-    ##
-    ## You specify this manually like you would a raw deployment manifest.
-    ## This means you can bind in environment variables from secrets.
-    ##
-    ## e.g. static environment variable:
-    ##  - name: DEMO_GREETING
-    ##    value: "Hello from the environment"
-    ##
-    ## e.g. secret environment variable:
-    ## - name: USERNAME
-    ##   valueFrom:
-    ##     secretKeyRef:
-    ##       name: mysecret
-    ##       key: username
     env: []
-
     extraFlags:
       - web.enable-lifecycle
-      ## web.enable-admin-api flag controls access to the administrative HTTP API which includes functionality such as
-      ## deleting time series. This is disabled by default.
-      # - web.enable-admin-api
-      ##
-      ## storage.tsdb.no-lockfile flag controls BD locking
-      # - storage.tsdb.no-lockfile
-      ##
-      ## storage.tsdb.wal-compression flag enables compression of the write-ahead log (WAL)
-      # - storage.tsdb.wal-compression
-
-    ## Path to a configuration file on prometheus server container FS
     configPath: /etc/config/prometheus.yml
-
     global:
-      ## How frequently to scrape targets by default
-      ##
       scrape_interval: 1m
-      ## How long until a scrape request times out
-      ##
       scrape_timeout: 60s
-      ## How frequently to evaluate rules
-      ##
       evaluation_interval: 1m
       external_labels:
         cluster_id: cluster-one  # Each cluster should have a unique ID
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
-    ##
     remoteWrite: {}
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read
-    ##
     remoteRead: {}
-
-    ## Additional Prometheus server container arguments
-    ##
     extraArgs:
       query.max-concurrency: 1
       query.max-samples: 100000000
-
-    ## Additional InitContainers to initialize the pod
-    ##
     extraInitContainers: []
-
-    ## Additional Prometheus server Volume mounts
-    ##
     extraVolumeMounts: []
-
-    ## Additional Prometheus server Volumes
-    ##
     extraVolumes: []
-
-    ## Additional Prometheus server hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: certs-dir
-      #   mountPath: /etc/kubernetes/certs
-      #   subPath: ""
-      #   hostPath: /etc/kubernetes/certs
-      #   readOnly: true
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   subPath: ""
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Additional Prometheus server Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: prom-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.server.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/server-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
     ingress:
-      ## If true, Prometheus server Ingress will be created
-      ##
       enabled: false
       # className: nginx
-
-      ## Prometheus server Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## Prometheus server Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## Prometheus server Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - prometheus.domain.com
-      #   - domain.com/prometheus
-
-      ## PathType determines the interpretation of the Path matching
       pathType: "Prefix"
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## Prometheus server Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-server-tls
-      #     hosts:
-      #       - prometheus.domain.com
-
-    ## Server Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for Prometheus server pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, Prometheus server will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## Prometheus server data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## Prometheus server data Persistent Volume annotations
-      ##
       annotations: {}
-        # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-      ## Prometheus server data Persistent Volume existing claim name
-      ## Requires server.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## Prometheus server data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## Prometheus server data Persistent Volume size
-      ##
       size: 32Gi
-
-      ## Prometheus server data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## Prometheus server data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of Prometheus server data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
     emptyDir:
       sizeLimit: ""
-
-    ## Annotations to be added to Prometheus server pods
-    ##
     podAnnotations: {}
-      # iam.amazonaws.com/role: prometheus
-
-    ## Annotations to be added to the Prometheus Server deployment
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to Prometheus server pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Prometheus AlertManager configuration
-    ##
     alertmanagers: []
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
       annotations: {}
       labels: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
         servicePort: 80
-
-    ## Prometheus server readiness and liveness probe initial delay and timeout
-    ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
-    ##
     readinessProbeInitialDelay: 5
     readinessProbeTimeout: 3
     readinessProbeFailureThreshold: 3
     readinessProbeSuccessThreshold: 1
     livenessProbeInitialDelay: 5
     livenessProbeTimeout: 3
     livenessProbeFailureThreshold: 3
     livenessProbeSuccessThreshold: 1
-
-    ## Prometheus server resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 500m
-      #   memory: 512Mi
-      # requests:
-      #   cpu: 500m
-      #   memory: 512Mi
-
-    ## Vertical Pod Autoscaler config
-    ## Ref: https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
     verticalAutoscaler:
-      ## If true a VPA object will be created for the controller (either StatefulSet or Deployment, based on above configs)
       enabled: false
       ## Optional. Defaults to "Auto" if not specified.
       # updateMode: "Auto"
       ## Mandatory. Without, VPA will not be created.
       # containerPolicies:
       # - containerName: 'prometheus-server'
-
-    ## Security context to be added to server pods
-    ##
     securityContext: {}
-      # runAsUser: 1001
-      # runAsNonRoot: true
-      # runAsGroup: 1001
-      # fsGroup: 1001
-
     containerSecurityContext: {}
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-      # nodePort: ""
-
-      ## List of IP addresses at which the Prometheus server service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       sessionAffinity: None
       type: ClusterIP
-
-      ## Enable gRPC port on service to allow auto discovery with thanos-querier
       gRPC:
         enabled: false
         servicePort: 10901
-        # nodePort: 10901
-
-      ## If using a statefulSet (statefulSet.enabled=true), configure the
-      ## service to connect to a specific replica to have a consistent view
-      ## of the data.
       statefulsetReplica:
         enabled: false
         replica: 0
-
-    ## Prometheus server pod termination grace period
-    ##
     terminationGracePeriodSeconds: 300
 
     ## Prometheus data retention period (default if not specified is 97 hours)
     ##
@@ -1366,292 +991,92 @@
     # retentionSize: should be significantly greater than the storage used in the number of hours set in etlHourlyStoreDurationHours
 
   # Install Prometheus Alert Manager
   alertmanager:
-    ## If false, alertmanager will not be installed
-    ##
     enabled: false
-
     ## Provide a full name override for Prometheus alertmanager.
     # fullnameOverride: ""
-
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## alertmanager container name
-    ##
     name: alertmanager
-
-    ## alertmanager container image
-    ##
     image:
       repository: quay.io/prometheus/alertmanager
       tag: v0.27.0
       pullPolicy: IfNotPresent
-
-    ## alertmanager priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Additional alertmanager container arguments
-    ##
     extraArgs: {}
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
     baseURL: "http://localhost:9093"
-
-    ## Additional alertmanager container environment variable
-    ## For instance to add a http_proxy
-    ##
     extraEnv: {}
-
-    ## Additional alertmanager Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: alertmanager-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.alertmanager.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
-    ## The name of a secret in the same kubernetes namespace which contains the Alertmanager config
-    ## Defining configFromSecret will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configFromSecret: ""
-
-    ## The configuration file name to be loaded to alertmanager
-    ## Must match the key within configuration loaded from ConfigMap/Secret
-    ##
     configFileName: alertmanager.yml
-
     ingress:
-      ## If true, alertmanager Ingress will be created
-      ##
       enabled: false
-
-      ## alertmanager Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## alertmanager Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## alertmanager Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - alertmanager.domain.com
-      #   - domain.com/alertmanager
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## alertmanager Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - alertmanager.domain.com
-
-    ## Alertmanager Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for alertmanager scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for alertmanager pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, alertmanager will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## alertmanager data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## alertmanager data Persistent Volume Claim annotations
-      ##
       annotations: {}
-
-      ## alertmanager data Persistent Volume existing claim name
-      ## Requires alertmanager.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## alertmanager data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## alertmanager data Persistent Volume size
-      ##
       size: 2Gi
-
-      ## alertmanager data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## alertmanager data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of alertmanager data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
-    ## Annotations to be added to alertmanager pods
-    ##
     podAnnotations: {}
-      ## Tell prometheus to use a specific set of alertmanager pods
-      ## instead of all alertmanager pods found in the same namespace
-      ## Useful if you deploy multiple releases within the same namespace
-      ##
-      ## prometheus.io/probe: alertmanager-teamA
-
-    ## Labels to be added to Prometheus AlertManager pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
+      annotations: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
-
-        ## Enabling peer mesh service end points for enabling the HA alert manager
-        ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
         # enableMeshPeer : true
-
         servicePort: 80
-
-    ## alertmanager resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to alertmanager pods
-    ##
     securityContext:
       runAsUser: 1001
       runAsNonRoot: true
       runAsGroup: 1001
       fsGroup: 1001
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-
-      ## Enabling peer mesh service end points for enabling the HA alert manager
-      ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
       # enableMeshPeer : true
-
-      ## List of IP addresses at which the alertmanager service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       # nodePort: 30000
       sessionAffinity: None
       type: ClusterIP
 
-    # Define a custom scheduler for Alertmanager pods
-    # schedulerName: default-scheduler
-
-  ## alertmanager ConfigMap entries
-  ##
   alertmanagerFiles:
     alertmanager.yml:
       global: {}
-        # slack_api_url: ''
-
       receivers:
         - name: default-receiver
-          # slack_configs:
-          #  - channel: '@you'
-          #    send_resolved: true
-
       route:
         group_wait: 10s
         group_interval: 5m
         receiver: default-receiver
@@ -1659,87 +1084,32 @@
 
   ## Monitors ConfigMap changes and POSTs to a URL
   configmapReload:
     prometheus:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
-
-      ## configmap-reload container securityContext
       containerSecurityContext: {}
 
     alertmanager:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
 
-  # node-export must be disabled if there is an existing daemonset: https://guide.kubecost.com/hc/en-us/articles/4407601830679-Troubleshoot-Install#a-name-node-exporter-a-issue-failedscheduling-kubecost-prometheus-node-exporter
   nodeExporter:
     ## If false, node-exporter will not be installed.
     ## This is disabled by default in Kubecost 2.0, though it can be enabled as needed.
     ##
@@ -1747,346 +1117,59 @@
 
     ## Provide a full name override for node exporter.
     # fullnameOverride: ""
 
-    ## If true, node-exporter pods share the host network namespace
-    ##
     hostNetwork: true
-
-    ## If true, node-exporter pods share the host PID namespace
-    ##
     hostPID: true
-
-    ## node-exporter dns policy
-    ##
     dnsPolicy: ClusterFirstWithHostNet
-
-    ## node-exporter container name
-    ##
     name: node-exporter
-
-    ## node-exporter container image
-    ##
     image:
       repository: prom/node-exporter
       tag: v1.8.2
       pullPolicy: IfNotPresent
-
-    ## node-exporter priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Custom Update Strategy
-    ##
     updateStrategy:
       type: RollingUpdate
-
-    ## Additional node-exporter container arguments
-    ##
     extraArgs: {}
-
-    ## Additional node-exporter hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: textfile-dir
-      #   mountPath: /srv/txt_collector
-      #   hostPath: /var/lib/node-exporter
-      #   readOnly: true
-      #   mountPropagation: HostToContainer
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Set a custom affinity for node-exporter
-    ##
     # affinity:
-
-    ## Node tolerations for node-exporter scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for node-exporter pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Annotations to be added to node-exporter pods
-    ##
     podAnnotations: {}
-
-    ## Annotations to be added to the node-exporter DaemonSet
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to node-exporter pods
-    ##
+    annotations: {}
     pod:
       labels: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## node-exporter resource limits & requests
-    ## Ref: https://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 200m
-      #   memory: 50Mi
-      # requests:
-      #   cpu: 100m
-      #   memory: 30Mi
-
-    ## Security context to be added to node-exporter pods
-    ##
     securityContext: {}
-      # runAsUser: 0
-
     service:
       annotations:
         prometheus.io/scrape: "true"
       labels: {}
-
-      # Exposed as a headless service:
-      # https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
       clusterIP: None
-
-      ## List of IP addresses at which the node-exporter service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       hostPort: 9100
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 9100
       type: ClusterIP
 
-  # Install Prometheus Push Gateway.
-  pushgateway:
-    ## If false, pushgateway will not be installed
-    ##
-    enabled: false
-
-    ## Provide a full name override for Prometheus push gateway.
-    # fullnameOverride: ""
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
-    # schedulerName:
-
-    ## pushgateway container name
-    ##
-    name: pushgateway
-
-    ## pushgateway container image
-    ##
-    image:
-      repository: prom/pushgateway
-      tag: v1.9.0
-      pullPolicy: IfNotPresent
-
-    ## pushgateway priorityClassName
-    ##
-    priorityClassName: ""
-
-    ## Additional pushgateway container arguments
-    ##
-    ## for example: persistence.file: /data/pushgateway.data
-    extraArgs: {}
-
-    ingress:
-      ## If true, pushgateway Ingress will be created
-      ##
-      enabled: false
-
-      ## pushgateway Ingress annotations
-      ##
-      annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## pushgateway Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
-      hosts: []
-      #   - pushgateway.domain.com
-      #   - domain.com/pushgateway
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
-      extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## pushgateway Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
-      tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - pushgateway.domain.com
-
-    ## Node tolerations for pushgateway scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
-    tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for pushgateway pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
-    nodeSelector: {}
-
-    ## Annotations to be added to pushgateway pods
-    ##
-    podAnnotations: {}
-
-    replicaCount: 1
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
-    podDisruptionBudget:
-      enabled: false
-      maxUnavailable: 1
-
-    ## pushgateway resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
-    resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to push-gateway pods
-    ##
-    securityContext:
-      runAsUser: 1001
-      runAsNonRoot: true
-
-    service:
-      annotations:
-        prometheus.io/probe: pushgateway
-      labels: {}
-      clusterIP: ""
-
-      ## List of IP addresses at which the pushgateway service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
-      externalIPs: []
-
-      loadBalancerIP: ""
-      loadBalancerSourceRanges: []
-      servicePort: 9091
-      type: ClusterIP
-
-    strategy:
-      type: Recreate
-      rollingUpdate: null
-
-
-    persistentVolume:
-      ## If true, pushgateway will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
-      enabled: true
-
-      ## pushgateway data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
-      accessModes:
-        - ReadWriteOnce
-
-      ## pushgateway data Persistent Volume Claim annotations
-      ##
-      annotations: {}
-
-      ## pushgateway data Persistent Volume existing claim name
-      ## Requires pushgateway.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
-      existingClaim: ""
-
-      ## pushgateway data Persistent Volume mount root path
-      ##
-      mountPath: /data
-
-      ## pushgateway data Persistent Volume size
-      ##
-      size: 2Gi
-
-      ## pushgateway data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
-      # storageClass: "-"
-
-      ## pushgateway data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
-      # volumeBindingMode: ""
-
-      ## Subdirectory of pushgateway data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
-      subPath: ""
-
   serverFiles:
     ## Alerts configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
     alerting_rules.yml: {}
-    # groups:
-    #   - name: Instances
-    #     rules:
-    #       - alert: InstanceDown
-    #         expr: up == 0
-    #         for: 5m
-    #         labels:
-    #           severity: page
-    #         annotations:
-    #           description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
-    #           summary: 'Instance {{ $labels.instance }} down'
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use alerting_rules.yml
-    alerts: {}
 
     ## Records configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/
     recording_rules.yml: {}
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use recording_rules.yml
 
     prometheus.yml:
       rule_files:
         - /etc/config/recording_rules.yml
         - /etc/config/alerting_rules.yml
-      ## Below two files are DEPRECATED will be removed from this default values file
-        - /etc/config/rules
-        - /etc/config/alerts
 
       scrape_configs:
         - job_name: prometheus
           static_configs:
@@ -2098,9 +1181,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes-cadvisor'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2159,9 +1241,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2252,21 +1333,8 @@
           metric_relabel_configs:
             - source_labels: [__name__]
               regex: (container_cpu_allocation|container_cpu_usage_seconds_total|container_fs_limit_bytes|container_fs_writes_bytes_total|container_gpu_allocation|container_memory_allocation_bytes|container_memory_usage_bytes|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|DCGM_FI_DEV_GPU_UTIL|deployment_match_labels|kube_daemonset_status_desired_number_scheduled|kube_daemonset_status_number_ready|kube_deployment_spec_replicas|kube_deployment_status_replicas|kube_deployment_status_replicas_available|kube_job_status_failed|kube_namespace_annotations|kube_namespace_labels|kube_node_info|kube_node_labels|kube_node_status_allocatable|kube_node_status_allocatable_cpu_cores|kube_node_status_allocatable_memory_bytes|kube_node_status_capacity|kube_node_status_capacity_cpu_cores|kube_node_status_capacity_memory_bytes|kube_node_status_condition|kube_persistentvolume_capacity_bytes|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_limits_cpu_cores|kube_pod_container_resource_limits_memory_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_requests_cpu_cores|kube_pod_container_resource_requests_memory_bytes|kube_pod_container_status_restarts_total|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_labels|kube_pod_owner|kube_pod_status_phase|kube_replicaset_owner|kube_statefulset_replicas|kube_statefulset_status_replicas|kubecost_cluster_info|kubecost_cluster_management_cost|kubecost_cluster_memory_working_set_bytes|kubecost_load_balancer_cost|kubecost_network_internet_egress_cost|kubecost_network_region_egress_cost|kubecost_network_zone_egress_cost|kubecost_node_is_spot|kubecost_pod_network_egress_bytes_total|node_cpu_hourly_cost|node_cpu_seconds_total|node_disk_reads_completed|node_disk_reads_completed_total|node_disk_writes_completed|node_disk_writes_completed_total|node_filesystem_device_error|node_gpu_count|node_gpu_hourly_cost|node_memory_Buffers_bytes|node_memory_Cached_bytes|node_memory_MemAvailable_bytes|node_memory_MemFree_bytes|node_memory_MemTotal_bytes|node_network_transmit_bytes_total|node_ram_hourly_cost|node_total_hourly_cost|pod_pvc_allocation|pv_hourly_cost|service_selector_labels|statefulSet_match_labels|kubecost_pv_info|up)
               action: keep
-
-
-  #  prometheus.yml: # Sample block -- enable if using an in cluster durable store.
-  #      remote_write:
-  #        - url: "http://pgprometheus-adapter:9201/write"
-  #          write_relabel_configs:
-  #            - source_labels: [__name__]
-  #              regex: 'container_.*_allocation|container_.*_allocation_bytes|.*_hourly_cost|kube_pod_container_resource_requests{resource="memory", unit="byte"}|container_memory_working_set_bytes|kube_pod_container_resource_requests{resource="cpu", unit="core"}|kube_pod_container_resource_requests|pod_pvc_allocation|kube_namespace_labels|kube_pod_labels'
-  #              action: keep
-  #          queue_config:
-  #            max_samples_per_send: 1000
-        # remote_read:
-        #  - url: "http://pgprometheus-adapter:9201/read"
     rules:
       groups:
         - name: CPU
           rules:
@@ -2307,13 +1375,10 @@
     #   regex: (.+)\d+
     #   target_label: dc
 
   networkPolicy:
-    ## Enable creation of NetworkPolicy resources.
-    ##
     enabled: false
 
-
 ## Optional daemonset to more accurately attribute network costs to the correct workload
 ## https://docs.kubecost.com/install-and-configure/advanced-configuration/network-costs-configuration
 networkCosts:
   enabled: false
@@ -2332,14 +1397,15 @@
   # Traffic Logging will enable logging the top 5 destinations for each source
   # every 30 minutes.
   trafficLogging: true
 
+  # Log level for the network cost containers. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # Port will set both the containerPort and hostPort to this value.
   # These must be identical due to network-costs being run on hostNetwork
   port: 3001
-  # this daemonset can use significant resources on large clusters: https://guide.kubecost.com/hc/en-us/articles/4407595973527-Network-Traffic-Cost-Allocation
+  # this daemonset can use significant resources on large clusters: https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui/cost-allocation/network-allocation
   resources:
     limits:  # remove the limits by setting cpu: null
       cpu: 500m  # can be less, will depend on cluster size
       # memory: it is not recommended to set a memory limit
@@ -2410,75 +1476,41 @@
       #    ips:
       #      - "15.128.15.2"
       #      - "20.0.0.0/8"
 
-  ## Node tolerations for server scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
   tolerations: []
-  #  - key: "key"
-  #    operator: "Equal|Exists"
-  #    value: "value"
-  #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
   affinity: {}
-
   service:
     annotations: {}
     labels: {}
-
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  ## PodMonitor
-  ## Allows scraping of network metrics from a dedicated prometheus operator setup
   podMonitor:
     enabled: false
     additionalLabels: {}
-  # match the default extraScrapeConfig
   additionalLabels: {}
   nodeSelector: {}
+  # Annotations to be added to network cost daemonset template and pod template annotations
   annotations: {}
   healthCheckProbes: {}
-    # readinessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
-    # livenessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
   additionalSecurityContext: {}
-    # readOnlyRootFilesystem: true
 
 ## Kubecost Deployment Configuration
 ## Used for HA mode in Business & Enterprise tier
 ##
 kubecostDeployment:
   replicas: 1
-  # deploymentStrategy:
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
   labels: {}
   annotations: {}
 
-
 ## Kubecost Forecasting forecasts future cost patterns based on historical
 ## patterns observed by Kubecost.
 forecasting:
   enabled: true
 
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for the forecasting
   # container.
-  # Example: fullImageName: gcr.io/kubecost1/forecasting:v0.0.1
-  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.18
   imagePullPolicy: IfNotPresent
 
   # Resource specification block for the forecasting container.
   resources:
@@ -2494,30 +1526,20 @@
     # -t is the worker timeout which primarily affects model training time;
     # if it is not high enough, training workers may die mid training
     "GUNICORN_CMD_ARGS": "--log-level info -t 1200"
 
-  # Define a priority class for the forecasting Deployment.
   priority:
     enabled: false
     name: ""
-
-  # Define a nodeSelector for the forecasting Deployment.
   nodeSelector: {}
-
-  # Define tolerations for the forecasting Deployment.
   tolerations: []
-
-  # Define Pod affinity for the forecasting Deployment.
+  annotations: {}
   affinity: {}
-
-  # Define a readiness probe for the forecasting container
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the forecasting container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -2545,8 +1567,9 @@
   # Replicas sets the number of Aggregator replicas. It only has an effect if
   # `deployMethod: "statefulset"`
   replicas: 1
 
+  # Log level for the aggregator container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # stagingEmptyDirSizeLimit changes how large the "staging"
   # /var/configs/waterfowl emptyDir is. It only takes effect in StatefulSet
@@ -2673,8 +1696,11 @@
 
   ## Define tolerations for the aggregator pod
   # tolerations: []
 
+  ## Annotations to be added for aggregator deployment or statefulset
+  # annotations: {}
+
   ## Define Pod affinity for the aggregator pod
   # affinity: {}
 
   ## Define extra volumes for the aggregator pod
@@ -2737,9 +1763,8 @@
   jaeger:
     enabled: false
     image: jaegertracing/all-in-one
     imageVersion: latest
-    # containerSecurityContext:
 
   service:
     labels: {}
 
@@ -2785,8 +1810,10 @@
     securityContext: {}
     containerSecurityContext: {}
     nodeSelector: {}
     tolerations: []
+    ## Annotations to be added for diagnostics Deployment.
+    annotations: {}
     affinity: {}
 
 ## Provide a full name override for the diagnostics Deployment.
 # diagnosticsFullnameOverride: ""
@@ -2797,14 +1824,16 @@
   image:
     repository: gcr.io/kubecost1/cluster-controller
     tag: v0.16.9
   imagePullPolicy: IfNotPresent
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Set custom tolerations for the cluster controller.
   tolerations: []
+
+  ## Annotations to be added for cluster controller template
+  annotations: {}
   resources: {}
+  affinity: {}
+  nodeSelector: {}
   actionConfigs:
     # this configures the Kubecost Cluster Turndown action
     # for more details, see documentation at https://github.com/kubecost/cluster-turndown/tree/develop?tab=readme-ov-file#setting-a-turndown-schedule
     clusterTurndown: []
@@ -2950,12 +1979,12 @@
 # initChownDataImage ensures all Kubecost filepath permissions on PV or local storage are set up correctly.
 initChownDataImage: "busybox"  # Supports a fully qualified Docker image, e.g. registry.hub.docker.com/library/busybox:latest
 initChownData:
   resources: {}
-    # requests:
-    #   cpu: "50m"
-    #   memory: "20Mi"
 
+## Kubecost's Bundled Grafana
+## You can access it by visiting http://kubecost.me.com/grafana/
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/custom-grafana
 grafana:
   # namespace_datasources: kubecost # override the default namespace here
   # namespace_dashboards: kubecost # override the default namespace here
   rbac:
@@ -2987,106 +2016,45 @@
   #           prometheusType: Prometheus
   #           prometheusVersion: 2.35.0
   #           timeInterval: 1m
 
-  ## Number of replicas for the Grafana deployment
   replicas: 1
-
-  ## Deployment strategy for the Grafana deployment
   deploymentStrategy: RollingUpdate
-
-  ## Readiness probe for the Grafana deployment
   readinessProbe:
     httpGet:
       path: /api/health
       port: 3000
-
-  ## Liveness probe for the Grafana deployment
   livenessProbe:
     httpGet:
       path: /api/health
       port: 3000
     initialDelaySeconds: 60
     timeoutSeconds: 30
     failureThreshold: 10
-
-  ## Container image settings for the Grafana deployment
   image:
     repository: grafana/grafana
     tag: 11.3.1
     pullPolicy: IfNotPresent
-
-    ## Optionally specify an array of imagePullSecrets.
-    ## Secrets must be manually created in the namespace.
     # pullSecrets:
-    #   - myRegistrKeySecretName
-
-  ## Pod-level security context for the Grafana deployment. Recommended let global defaults take effect.
   securityContext: {}
-    # runAsUser: 472
-    # fsGroup: 472
-
-  ## PriorityClassName for the Grafana deployment
   priorityClassName: ""
 
   ## Container image settings for Grafana initContainer used to download dashboards. Will only be used when dashboards are present.
   downloadDashboardsImage:
     repository: curlimages/curl
     tag: latest
     pullPolicy: IfNotPresent
-
-  ## Pod Annotations for the Grafana deployment
   podAnnotations: {}
-
-  ## Deployment annotations for the Grafana deployment
   annotations: {}
-
-  ## Expose the Grafana service to be accessed from outside the cluster (LoadBalancer service).
-  ## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
   service:
     type: ClusterIP
     port: 80
     annotations: {}
     labels: {}
-
-  ##  This template is not needed and is not supported.
-  ##  It is here for backwards compatibility.
-  ##  Kubecost exposes grafana by default with the
-  ##  top level ingress template under /grafana/
-  ingress:
-    enabled: false
-    annotations: {}
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    labels: {}
-    path: /
-    pathType: Prefix
-    hosts:
-      - chart-example.local
-    tls: []
-    #  - secretName: chart-example-tls
-    #    hosts:
-    #      - chart-example.local
-
-  ## Resource requests and limits for the Grafana deployment
   resources: {}
-  #  limits:
-  #    cpu: 100m
-  #    memory: 128Mi
-  #  requests:
-  #    cpu: 100m
-  #    memory: 128Mi
-
-  ## Node labels for pod assignment of the Grafana deployment
   nodeSelector: {}
-
-  ## Tolerations for pod assignment of the Grafana deployment
   tolerations: []
-
-  ## Affinity for pod assignment of the Grafana deployment
   affinity: {}
-
-  ## Enable persistence using Persistent Volume Claims of the Grafana deployment
   persistence:
     enabled: false
     # storageClassName: default
     # accessModes:
@@ -3094,123 +2062,24 @@
     # size: 10Gi
     # annotations: {}
     # subPath: ""
     # existingClaim:
-
-  ## Admin user for Grafana
   adminUser: admin
-
-  ## Admin password for Grafana
   adminPassword: strongpassword
-
-  ## Use an alternate scheduler for the Grafana deployment
   # schedulerName:
-
-  ## Extra environment variables that will be passed onto Grafana deployment pods
   env: {}
-
-  ## The name of a secret for Grafana in the same Kubernetes namespace which contain values to be added to the environment
-  ## This can be useful for auth tokens, etc
   envFromSecret: ""
-
-  ## Additional Grafana server secret mounts
-  ## Defines additional mounts with secrets. Secrets must be manually created in the namespace.
   extraSecretMounts: []
-    # - name: secret-files
-    #   mountPath: /etc/secrets
-    #   secretName: grafana-secret-files
-    #   readOnly: true
-
-  ## List of Grafana plugins
   plugins: []
-    # - digrich-bubblechart-panel
-    # - grafana-clock-panel
-
-  ## Grafana dashboard providers
-  ## ref: http://docs.grafana.org/administration/provisioning/#dashboards
-  ##
-  ## `path` must be /var/lib/grafana/dashboards/<provider_name>
-  ##
   dashboardProviders: {}
-  #  dashboardproviders.yaml:
-  #    apiVersion: 1
-  #    providers:
-  #    - name: 'default'
-  #      orgId: 1
-  #     folder: ''
-  #      type: file
-  #      disableDeletion: false
-  #      editable: true
-  #      options:
-  #        path: /var/lib/grafana/dashboards/default
-
-  ## Configure Grafana dashboard to import
-  ## NOTE: To use dashboards you must also enable/configure dashboardProviders
-  ## ref: https://grafana.com/dashboards
-  ##
-  ## dashboards per provider, use provider name as key.
-  ##
   dashboards: {}
-  #  default:
-  #    prometheus-stats:
-  #      gnetId: 3662
-  #      revision: 2
-  #      datasource: Prometheus
-
-  ## Reference to external Grafana ConfigMap per provider. Use provider name as key and ConfiMap name as value.
-  ## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
-  ## ConfigMap data example:
-  ##
-  ## data:
-  ##   example-dashboard.json: |
-  ##     RAW_JSON
-  ##
   dashboardsConfigMaps: {}
-  #  default: ""
-
-  ## LDAP Authentication for Grafana can be enabled with the following values on grafana.ini
-  ## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
-    # auth.ldap:
-    #   enabled: true
-    #   allow_sign_up: true
-    #   config_file: /etc/grafana/ldap.toml
-
-  ## Grafana's LDAP configuration
-  ## Templated by the template in _helpers.tpl
-  ## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
-  ## ref: http://docs.grafana.org/installation/ldap/#configuration
-  ldap:
-    # `existingSecret` is a reference to an existing secret containing the ldap configuration
-    # for Grafana in a key `ldap-toml`.
-    existingSecret: ""
-    # `config` is the content of `ldap.toml` that will be stored in the created secret
-    config: ""
-    # config: |-
-    #   verbose_logging = true
-
-    #   [[servers]]
-    #   host = "my-ldap-server"
-    #   port = 636
-    #   use_ssl = true
-    #   start_tls = false
-    #   ssl_skip_verify = false
-    #   bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
-
-  ## Grafana's SMTP configuration
-  ## NOTE: To enable, grafana.ini must be configured with smtp.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#smtp
-  smtp:
-    # `existingSecret` is a reference to an existing secret containing the smtp configuration
-    # for Grafana in keys `user` and `password`.
-    existingSecret: ""
-
   ## Grafana sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
   ## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
   sidecar:
     image:
       repository: ghcr.io/kiwigrid/k8s-sidecar
-      tag: 1.28.0
+      tag: 1.28.1
       pullPolicy: IfNotPresent
     resources: {}
     dashboards:
       enabled: true
@@ -3226,9 +2095,8 @@
       enabled: false
       error_throttle_sleep: 0
       # label that the configmaps with datasources are marked with
       label: grafana_datasource
-
   ## Grafana's primary configuration
   ## NOTE: values in map will be converted to ini format
   ## ref: http://docs.grafana.org/installation/configuration/
   ##
@@ -3256,21 +2124,15 @@
 
 serviceAccount:
   create: true  # Set this to false if you're bringing your own service account.
   annotations: {}
-  # name: kc-test
 
 awsstore:
   useAwsStore: false
-  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest  # Name and version of the container image for AWSStore.
+  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest
   createServiceAccount: false
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Use a custom nodeSelector for AWSStore.
   nodeSelector: {}
-    # kubernetes.io/arch: amd64
-  ## Annotations for the AWSStore ServiceAccount.
   annotations: {}
 
 ## Federated ETL Architecture
 ## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/federated-etl
@@ -3331,9 +2193,9 @@
 #       address: http://cluster-a.kubecost.com:9090
 #       # Optional authentication credentials - only basic auth is currently supported.
 #       auth:
 #         type: basic
-#         # Secret name should be a secret formatted based on: https://github.com/kubecost/docs/blob/main/ingress-examples.md
+#         # Secret name should be a secret formatted based on: https://github.com/kubecost/poc-common-configurations/tree/main/ingress-examples
 #         secretName: cluster-a-auth
 #         # Or pass auth directly as base64 encoded user:pass
 #         data: YWRtaW46YWRtaW4=
 #         # Or user and pass directly
@@ -3369,10 +2231,10 @@
 #   gpuLabel: gpu
 #   gpuLabelValue: true
 #   alibabaServiceKeyName: ""
 #   alibabaServiceKeyPassword: ""
-#   awsServiceKeyName: ACCESSKEYID
-#   awsServiceKeyPassword:  fakepassword # Only use if your values.yaml are stored encrypted. Otherwise provide an existing secret via serviceKeySecretName
+#   awsServiceKeyName: ""
+#   awsServiceKeyPassword: ""
 #   awsSpotDataRegion: us-east-1
 #   awsSpotDataBucket: spot-data-feed-s3-bucket
 #   awsSpotDataPrefix: dev
 #   athenaProjectID: "530337586277" # The AWS AccountID where the Athena CUR is. Generally your masterpayer account
@@ -3551,4 +2413,8 @@
 #             host: kubecost.kubecost.svc.cluster.local
 #             port:
 #               number: 80
 
+# -- Optional override for the image used for the basic health test container
+# basicHealth:
+#   fullImageName: alpine/k8s:1.26.9
+

Copy link
Contributor

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-31 06:35:45.243596375 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-31 06:35:17.030113424 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-31 06:35:45.243596375 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-31 06:35:17.030113424 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-31 06:35:45.243596375 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-31 06:35:17.030113424 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-31 06:35:45.243596375 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-31 06:35:17.030113424 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-31 06:35:45.241596341 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-31 06:35:17.028113389 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-31 06:35:45.244596392 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-31 06:35:17.031113441 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 45f899ca0f060cb78b76717b768816a257756505a52b46a72a552cbed367f9ce
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJlbmFibGVkIjp0cnVlLCJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInBhdGhUeXBlIjoiSW1wbGVtZW50YXRpb25TcGVjaWZpYyIsInBhdGhzIjpbIi8iXSwidGxzIjpbeyJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJsb2dMZXZlbCI6ImluZm8iLCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXRjT2Zmc2V0IjoiKzAwOjAwIn0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJzeC1jbnAtb3NzIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLiBUaGUgbGFiZWwgbXVzdCBiZSBwcmVzZW50IG9uIHRoZSBLOHMgc2VydmljZSBlbmRwb2ludHMgYW5kIG5vdCBqdXN0IHBvZHMuXG4jIyBSZWZzOlxuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9ncHUtb3BlcmF0b3IvYmxvYi9kNDMxNmE0MTViYmQ2ODRjZTg0MTZhODgwNDIzMDVmYzFhMDkzYWE0L2Fzc2V0cy9zdGF0ZS1kY2dtLWV4cG9ydGVyLzA2MDBfc2VydmljZS55YW1sI0w3XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2RjZ20tZXhwb3J0ZXIvYmxvYi81NGZkMWNhMTM3YzY2NTExYTg3YTcyMDM5MDYxMzY4MGI5YmRhYmRkL2RlcGxveW1lbnQvdGVtcGxhdGVzL3NlcnZpY2UueWFtbCNMMjNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWRjZ20tZXhwb3J0ZXJcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogZW5kcG9pbnRzXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwLCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fY29tcG9uZW50LCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICg/aSkoLipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLiopXG4iLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhZmZpbml0eSI6e30sImFsZXJ0bWFuYWdlcnMiOltdLCJhbm5vdGF0aW9ucyI6e30sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiXSwic2NyYXBlX2NvbmZpZ3MiOlt7ImpvYl9uYW1lIjoicHJvbWV0aGV1cyIsInN0YXRpY19jb25maWdzIjpbeyJ0YXJnZXRzIjpbImxvY2FsaG9zdDo5MDkwIl19XX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2Rlcy1jYWR2aXNvciIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfc3BlY19jcHVfc2hhcmVzfGNvbnRhaW5lcl9zcGVjX21lbW9yeV9saW1pdF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNhZHZpc29yX3ZlcnNpb25faW5mb3xrdWJlY29zdF9wdl9pbmZvKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJjb250YWluZXIiXSwidGFyZ2V0X2xhYmVsIjoiY29udGFpbmVyX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbInBvZCJdLCJ0YXJnZXRfbGFiZWwiOiJwb2RfbmFtZSJ9XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzL2NhZHZpc29yIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGt1YmVsZXRfdm9sdW1lX3N0YXRzX3VzZWRfYnl0ZXMpIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcyIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtc2VydmljZS1lbmRwb2ludHMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJlbmRwb2ludHMifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X2FsbG9jYXRpb258Y29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9ncHVfYWxsb2NhdGlvbnxjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXN8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8RENHTV9GSV9ERVZfR1BVX1VUSUx8ZGVwbG95bWVudF9tYXRjaF9sYWJlbHN8a3ViZV9kYWVtb25zZXRfc3RhdHVzX2Rlc2lyZWRfbnVtYmVyX3NjaGVkdWxlZHxrdWJlX2RhZW1vbnNldF9zdGF0dXNfbnVtYmVyX3JlYWR5fGt1YmVfZGVwbG95bWVudF9zcGVjX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc19hdmFpbGFibGV8a3ViZV9qb2Jfc3RhdHVzX2ZhaWxlZHxrdWJlX25hbWVzcGFjZV9hbm5vdGF0aW9uc3xrdWJlX25hbWVzcGFjZV9sYWJlbHN8a3ViZV9ub2RlX2luZm98a3ViZV9ub2RlX2xhYmVsc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHl8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jb25kaXRpb258a3ViZV9wZXJzaXN0ZW50dm9sdW1lX2NhcGFjaXR5X2J5dGVzfGt1YmVfcGVyc2lzdGVudHZvbHVtZV9zdGF0dXNfcGhhc2V8a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1faW5mb3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9yZXNvdXJjZV9yZXF1ZXN0c19zdG9yYWdlX2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9pbmZvfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Jlc3RhcnRzX3RvdGFsfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcnVubmluZ3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Rlcm1pbmF0ZWRfcmVhc29ufGt1YmVfcG9kX2xhYmVsc3xrdWJlX3BvZF9vd25lcnxrdWJlX3BvZF9zdGF0dXNfcGhhc2V8a3ViZV9yZXBsaWNhc2V0X293bmVyfGt1YmVfc3RhdGVmdWxzZXRfcmVwbGljYXN8a3ViZV9zdGF0ZWZ1bHNldF9zdGF0dXNfcmVwbGljYXN8a3ViZWNvc3RfY2x1c3Rlcl9pbmZvfGt1YmVjb3N0X2NsdXN0ZXJfbWFuYWdlbWVudF9jb3N0fGt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGt1YmVjb3N0X2xvYWRfYmFsYW5jZXJfY29zdHxrdWJlY29zdF9uZXR3b3JrX2ludGVybmV0X2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfcmVnaW9uX2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfem9uZV9lZ3Jlc3NfY29zdHxrdWJlY29zdF9ub2RlX2lzX3Nwb3R8a3ViZWNvc3RfcG9kX25ldHdvcmtfZWdyZXNzX2J5dGVzX3RvdGFsfG5vZGVfY3B1X2hvdXJseV9jb3N0fG5vZGVfY3B1X3NlY29uZHNfdG90YWx8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkX3RvdGFsfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkX3RvdGFsfG5vZGVfZmlsZXN5c3RlbV9kZXZpY2VfZXJyb3J8bm9kZV9ncHVfY291bnR8bm9kZV9ncHVfaG91cmx5X2Nvc3R8bm9kZV9tZW1vcnlfQnVmZmVyc19ieXRlc3xub2RlX21lbW9yeV9DYWNoZWRfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtQXZhaWxhYmxlX2J5dGVzfG5vZGVfbWVtb3J5X01lbUZyZWVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtVG90YWxfYnl0ZXN8bm9kZV9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfG5vZGVfcmFtX2hvdXJseV9jb3N0fG5vZGVfdG90YWxfaG91cmx5X2Nvc3R8cG9kX3B2Y19hbGxvY2F0aW9ufHB2X2hvdXJseV9jb3N0fHNlcnZpY2Vfc2VsZWN0b3JfbGFiZWxzfHN0YXRlZnVsU2V0X21hdGNoX2xhYmVsc3xrdWJlY29zdF9wdl9pbmZvfHVwKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6dHJ1ZSwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY3JhcGUiXX0seyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoLipub2RlLWV4cG9ydGVyfGt1YmVjb3N0LW5ldHdvcmstY29zdHMpIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19lbmRwb2ludHNfbmFtZSJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihodHRwcz8pIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY2hlbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19zY2hlbWVfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcGF0aCJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoW146XSspKD86OlxcZCspPzsoXFxkKykiLCJyZXBsYWNlbWVudCI6IiQxOiQyIiwic291cmNlX2xhYmVscyI6WyJfX2FkZHJlc3NfXyIsIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BvcnQiXSwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2xhYmVsXyguKykifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25hbWVzcGFjZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWVzcGFjZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfcG9kX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25vZGUifV19XX0sInJlY29yZGluZ19ydWxlcy55bWwiOnt9LCJydWxlcyI6eyJncm91cHMiOlt7Im5hbWUiOiJDUFUiLCJydWxlcyI6W3siZXhwciI6InN1bShyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkpIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2U6cmF0ZTVtIn0seyJleHByIjoicmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2Vfbm9zdW06cmF0ZTVtIn0seyJleHByIjoiYXZnKGlyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiUE9EXCIsIGNvbnRhaW5lciE9XCJcIn1bNW1dKSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9jcHVfdXNhZ2VfaXJhdGUifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9XX0seyJuYW1lIjoiU2F2aW5ncyIsInJ1bGVzIjpbeyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifV19XX19LCJzZXJ2aWNlQWNjb3VudHMiOnsiYWxlcnRtYW5hZ2VyIjp7ImNyZWF0ZSI6dHJ1ZX0sIm5vZGVFeHBvcnRlciI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9fX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-31 06:35:45.241596341 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-31 06:35:17.028113389 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-31 06:35:45.244596392 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-31 06:35:17.031113441 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-31 06:35:45.241596341 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-31 06:35:17.028113389 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-31 06:35:45.243596375 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-31 06:35:17.030113424 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-31 06:35:45.241596341 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-31 06:35:17.028113389 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-31 06:35:45.243596375 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-31 06:35:17.030113424 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-31 06:35:45.241596341 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-31 06:35:17.028113389 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-31 06:35:45.241596341 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-31 06:35:17.028113389 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-31 06:35:45.244596392 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-31 06:35:17.031113441 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-31 06:35:45.244596392 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-31 06:35:17.030113424 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-31 06:35:45.244596392 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-31 06:35:17.031113441 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-31 06:35:17.298118121 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-31 06:35:45.518601084 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-31 06:35:17.296118086 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 45f899ca0f060cb78b76717b768816a257756505a52b46a72a552cbed367f9ce
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LW1hbmFnZXIuaW8vY2x1c3Rlci1pc3N1ZXIiOiJsZXRzZW5jcnlwdC1zdGFnaW5nIn0sImNsYXNzTmFtZSI6Im5naW54IiwiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJkZXBsb3ltZW50QW5ub3RhdGlvbnMiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJhbGVydHMiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9ydWxlcyIsIi9ldGMvY29uZmlnL2FsZXJ0cyJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInB1c2hnYXRld2F5Ijp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicmVwb3J0aW5nIjp7ImVycm9yUmVwb3J0aW5nIjp0cnVlLCJsb2dDb2xsZWN0aW9uIjp0cnVlLCJwcm9kdWN0QW5hbHl0aWNzIjp0cnVlLCJ2YWx1ZXNSZXBvcnRpbmciOnRydWV9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwibm9kZVBvcnQiOnt9LCJwb3J0Ijo5MDkwLCJ0YXJnZXRQb3J0Ijo5MDkwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibG9nTGV2ZWwiOiJpbmZvIiwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCJ9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC4gVGhlIGxhYmVsIG11c3QgYmUgcHJlc2VudCBvbiB0aGUgSzhzIHNlcnZpY2UgZW5kcG9pbnRzIGFuZCBub3QganVzdCBwb2RzLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYW5ub3RhdGlvbnMiOnt9LCJiYXNlVVJMIjoiIiwiY29uZmlnTWFwT3ZlcnJpZGVOYW1lIjoiIiwiY29uZmlnUGF0aCI6Ii9ldGMvY29uZmlnL3Byb21ldGhldXMueW1sIiwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7fSwiZW1wdHlEaXIiOnsic2l6ZUxpbWl0IjoiIn0sImVuYWJsZWQiOnRydWUsImVudiI6W10sImV4dHJhQXJncyI6eyJxdWVyeS5tYXgtY29uY3VycmVuY3kiOjEsInF1ZXJ5Lm1heC1zYW1wbGVzIjoxMDAwMDAwMDB9LCJleHRyYUNvbmZpZ21hcE1vdW50cyI6W10sImV4dHJhRmxhZ3MiOlsid2ViLmVuYWJsZS1saWZlY3ljbGUiXSwiZXh0cmFIb3N0UGF0aE1vdW50cyI6W10sImV4dHJhSW5pdENvbnRhaW5lcnMiOltdLCJleHRyYVNlY3JldE1vdW50cyI6W10sImV4dHJhVm9sdW1lTW91bnRzIjpbXSwiZXh0cmFWb2x1bWVzIjpbXSwiZ2xvYmFsIjp7ImV2YWx1YXRpb25faW50ZXJ2YWwiOiIxbSIsImV4dGVybmFsX2xhYmVscyI6eyJjbHVzdGVyX2lkIjoic3gtY25wLW9zcyJ9LCJzY3JhcGVfaW50ZXJ2YWwiOiIxbSIsInNjcmFwZV90aW1lb3V0IjoiNjBzIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoicXVheS5pby9wcm9tZXRoZXVzL3Byb21ldGhldXMiLCJ0YWciOiJ2Mi41NS4xIn0sImxpdmVuZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJsaXZlbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJsaXZlbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwibGl2ZW5lc3NQcm9iZVRpbWVvdXQiOjMsIm5hbWUiOiJzZXJ2ZXIiLCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFjY2Vzc01vZGVzIjpbIlJlYWRXcml0ZU9uY2UiXSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJleGlzdGluZ0NsYWltIjoiIiwibW91bnRQYXRoIjoiL2RhdGEiLCJzaXplIjoiMzJHaSIsInN1YlBhdGgiOiIifSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwb2RMYWJlbHMiOnt9LCJwcmVmaXhVUkwiOiIiLCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInJlYWRpbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywicmVhZGluZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsInJlYWRpbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwicmVhZGluZXNzUHJvYmVUaW1lb3V0IjozLCJyZW1vdGVSZWFkIjp7fSwicmVtb3RlV3JpdGUiOnt9LCJyZXBsaWNhQ291bnQiOjEsInJlc291cmNlcyI6e30sInJldGVudGlvbiI6Ijk3aCIsInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJjbHVzdGVySVAiOiIiLCJleHRlcm5hbElQcyI6W10sImxhYmVscyI6e30sImxvYWRCYWxhbmNlcklQIjoiIiwibG9hZEJhbGFuY2VyU291cmNlUmFuZ2VzIjpbXSwic2VydmljZVBvcnQiOjgwLCJzZXNzaW9uQWZmaW5pdHkiOiJOb25lIiwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOjMwMCwidG9sZXJhdGlvbnMiOltdfSwic2VydmVyRmlsZXMiOnsiYWxlcnRpbmdfcnVsZXMueW1sIjp7fSwicHJvbWV0aGV1cy55bWwiOnsicnVsZV9maWxlcyI6WyIvZXRjL2NvbmZpZy9yZWNvcmRpbmdfcnVsZXMueW1sIiwiL2V0Yy9jb25maWcvYWxlcnRpbmdfcnVsZXMueW1sIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-31 06:35:45.518601084 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-31 06:35:17.296118086 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-31 06:35:45.521601136 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-31 06:35:45.518601084 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-31 06:35:17.297118103 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-31 06:35:17.298118121 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-31 06:35:45.518601084 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-31 06:35:17.296118086 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-31 06:35:45.518601084 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-31 06:35:17.297118103 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-31 06:35:45.518601084 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-31 06:35:17.297118103 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-31 06:35:45.521601136 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-31 06:35:45.520601119 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-31 06:35:45.521601136 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-31 06:35:17.299118138 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2024-12-31 06:35:17.160115702 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 3200005267ed0d35ec8656b0c4da50d94bf7156275304458eccd802ce21d54ee
+        checksum/configs: 464ddc3eced704ef4072987b48e0134bc01babb9294f4d818dec7f9eed8943a9
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifSwiZ3JhZmFuYVVSTCI6Imh0dHBzOi8vZ3JhZmFuYS5sYWIuc3V4ZXNzaXQuazhzLmNsb3VkLnVpYmsuYWMuYXQifSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJhZGRpdGlvbmFsU2VjdXJpdHlDb250ZXh0Ijp7fSwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImNvbmZpZyI6eyJkZXN0aW5hdGlvbnMiOnsiY3Jvc3MtcmVnaW9uIjpbXSwiZGlyZWN0LWNsYXNzaWZpY2F0aW9uIjpbXSwiaW4tcmVnaW9uIjpbXSwiaW4tem9uZSI6WyIxMjcuMC4wLjAvOCIsIjE2OS4yNTQuMC4wLzE2IiwiMTAuMC4wLjAvOCIsIjE3Mi4xNi4wLjAvMTIiLCIxOTIuMTY4LjAuMC8xNiJdLCJpbnRlcm5ldCI6W119LCJzZXJ2aWNlcyI6eyJhbWF6b24td2ViLXNlcnZpY2VzIjp0cnVlLCJhenVyZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZSwiZ29vZ2xlLWNsb3VkLXNlcnZpY2VzIjp0cnVlfX0sImVuYWJsZWQiOnRydWUsImV4dHJhQXJncyI6W10sImhlYWx0aENoZWNrUHJvYmVzIjp7fSwiaW1hZ2UiOnsicmVwb3NpdG9yeSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbmV0d29yay1jb3N0cyIsInRhZyI6InYwLjE3LjYifSwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibG9nTGV2ZWwiOiJpbmZvIiwibm9kZVNlbGVjdG9yIjp7fSwicG9ydCI6MzAwMSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJwcm9tZXRoZXVzU2NyYXBlIjpmYWxzZSwicmVzb3VyY2VzIjp7ImxpbWl0cyI6eyJjcHUiOiI1MDBtIn0sInJlcXVlc3RzIjp7ImNwdSI6IjUwbSIsIm1lbW9yeSI6IjIwTWkifX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9fSwidG9sZXJhdGlvbnMiOltdLCJ0cmFmZmljTG9nZ2luZyI6dHJ1ZSwidXBkYXRlU3RyYXRlZ3kiOnsidHlwZSI6IlJvbGxpbmdVcGRhdGUifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJwcm9tZXRoZXVzUnVsZSI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNlcnZpY2VNb25pdG9yIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJuZXR3b3JrQ29zdHMiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWUsImludGVydmFsIjoiMW0iLCJtZXRyaWNSZWxhYmVsaW5ncyI6W10sInJlbGFiZWxpbmdzIjpbXSwic2NyYXBlVGltZW91dCI6IjEwcyJ9LCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJzZWN1cml0eUNvbnRleHQiOnsiZnNHcm91cCI6MTAwMSwiZnNHcm91cENoYW5nZVBvbGljeSI6Ik9uUm9vdE1pc21hdGNoIiwicnVuQXNHcm91cCI6MTAwMSwicnVuQXNOb25Sb290Ijp0cnVlLCJydW5Bc1VzZXIiOjEwMDEsInNlY2NvbXBQcm9maWxlIjp7InR5cGUiOiJSdW50aW1lRGVmYXVsdCJ9fX0sImdyYWZhbmEiOnsiYWRtaW5QYXNzd29yZCI6InN0cm9uZ3Bhc3N3b3JkIiwiYWRtaW5Vc2VyIjoiYWRtaW4iLCJhZmZpbml0eSI6e30sImFubm90YXRpb25zIjp7fSwiZGFzaGJvYXJkUHJvdmlkZXJzIjp7fSwiZGFzaGJvYXJkcyI6e30sImRhc2hib2FyZHNDb25maWdNYXBzIjp7fSwiZGVwbG95bWVudFN0cmF0ZWd5IjoiUm9sbGluZ1VwZGF0ZSIsImRvd25sb2FkRGFzaGJvYXJkc0ltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY3VybGltYWdlcy9jdXJsIiwidGFnIjoibGF0ZXN0In0sImVudiI6e30sImVudkZyb21TZWNyZXQiOiIiLCJleHRyYVNlY3JldE1vdW50cyI6W10sImdyYWZhbmEuaW5pIjp7ImFuYWx5dGljcyI6eyJjaGVja19mb3JfdXBkYXRlcyI6dHJ1ZX0sImF1dGguYW5vbnltb3VzIjp7ImVuYWJsZWQiOnRydWUsIm9yZ19uYW1lIjoiTWFpbiBPcmcuIiwib3JnX3JvbGUiOiJFZGl0b3IifSwiZ3JhZmFuYV9uZXQiOnsidXJsIjoiaHR0cHM6Ly9ncmFmYW5hLm5ldCJ9LCJsb2ciOnsibW9kZSI6ImNvbnNvbGUifSwicGF0aHMiOnsiZGF0YSI6Ii92YXIvbGliL2dyYWZhbmEvZGF0YSIsImxvZ3MiOiIvdmFyL2xvZy9ncmFmYW5hIiwicGx1Z2lucyI6Ii92YXIvbGliL2dyYWZhbmEvcGx1Z2lucyIsInByb3Zpc2lvbmluZyI6Ii9ldGMvZ3JhZmFuYS9wcm92aXNpb25pbmcifSwic2VydmVyIjp7InJvb3RfdXJsIjoiJShwcm90b2NvbClzOi8vJShkb21haW4pczolKGh0dHBfcG9ydClzL2dyYWZhbmEiLCJzZXJ2ZV9mcm9tX3N1Yl9wYXRoIjpmYWxzZX19LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdyYWZhbmEvZ3JhZmFuYSIsInRhZyI6IjExLjMuMSJ9LCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjEwLCJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjMwfSwibm9kZVNlbGVjdG9yIjp7fSwicGx1Z2lucyI6W10sInBvZEFubm90YXRpb25zIjp7fSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInJlYWRpbmVzc1Byb2JlIjp7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvaGVhbHRoIiwicG9ydCI6MzAwMH19LCJyZXBsaWNhcyI6MSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInBvcnQiOjgwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImNyZWF0ZSI6dHJ1ZSwibmFtZSI6IiJ9LCJzaWRlY2FyIjp7ImRhc2hib2FyZHMiOnsiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlcnJvcl90aHJvdHRsZV9zbGVlcCI6MCwiZm9sZGVyIjoiL3RtcC9kYXNoYm9hcmRzIiwibGFiZWwiOiJncmFmYW5hX2Rhc2hib2FyZCIsImxhYmVsVmFsdWUiOiIxIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ2hjci5pby9raXdpZ3JpZC9rOHMtc2lkZWNhciIsInRhZyI6IjEuMjguMSJ9LCJyZXNvdXJjZXMiOnt9fSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sImxvZ0xldmVsIjoiaW5mbyIsIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAifSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn0sImdyYWZhbmFVUkwiOiJodHRwczovL2dyYWZhbmEubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0In0sIm5ldHdvcmtDb3N0cyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiYWRkaXRpb25hbFNlY3VyaXR5Q29udGV4dCI6e30sImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJjb25maWciOnsiZGVzdGluYXRpb25zIjp7ImNyb3NzLXJlZ2lvbiI6W10sImRpcmVjdC1jbGFzc2lmaWNhdGlvbiI6W10sImluLXJlZ2lvbiI6W10sImluLXpvbmUiOlsiMTI3LjAuMC4wLzgiLCIxNjkuMjU0LjAuMC8xNiIsIjEwLjAuMC4wLzgiLCIxNzIuMTYuMC4wLzEyIiwiMTkyLjE2OC4wLjAvMTYiXSwiaW50ZXJuZXQiOltdfSwic2VydmljZXMiOnsiYW1hem9uLXdlYi1zZXJ2aWNlcyI6dHJ1ZSwiYXp1cmUtY2xvdWQtc2VydmljZXMiOnRydWUsImdvb2dsZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZX19LCJlbmFibGVkIjp0cnVlLCJleHRyYUFyZ3MiOltdLCJoZWFsdGhDaGVja1Byb2JlcyI6e30sImltYWdlIjp7InJlcG9zaXRvcnkiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW5ldHdvcmstY29zdHMiLCJ0YWciOiJ2MC4xNy42In0sImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxvZ0xldmVsIjoiaW5mbyIsIm5vZGVTZWxlY3RvciI6e30sInBvcnQiOjMwMDEsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicHJvbWV0aGV1c1NjcmFwZSI6ZmFsc2UsInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiNTAwbSJ9LCJyZXF1ZXN0cyI6eyJjcHUiOiI1MG0iLCJtZW1vcnkiOiIyME1pIn19LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fX0sInRvbGVyYXRpb25zIjpbXSwidHJhZmZpY0xvZ2dpbmciOnRydWUsInVwZGF0ZVN0cmF0ZWd5Ijp7InR5cGUiOiJSb2xsaW5nVXBkYXRlIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiMjIEVuYWJsZXMgc2NyYXBpbmcgb2YgTlZJRElBIEdQVSBtZXRyaWNzIHZpYSBkY2dtLWV4cG9ydGVyLiBTY3JhcGVzIGFsbFxuIyMgZW5kcG9pbnRzIHdoaWNoIGNvbnRhaW4gXCJkY2dtLWV4cG9ydGVyXCIgaW4gbGFiZWxzIFwiYXBwXCIsXG4jIyBcImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudFwiLCBvciBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIiB3aXRoIGEgY2FzZVxuIyMgaW5zZW5zaXRpdmUgbWF0Y2guIFRoZSBsYWJlbCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIEs4cyBzZXJ2aWNlIGVuZHBvaW50cyBhbmQgbm90IGp1c3QgcG9kcy5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImFubm90YXRpb25zIjp7fSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicHJvbWV0aGV1c1J1bGUiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWV9LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzZXJ2aWNlTW9uaXRvciI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJ2YWwiOiIxbSIsIm1ldHJpY1JlbGFiZWxpbmdzIjpbXSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwicmVsYWJlbGluZ3MiOltdLCJzY3JhcGVUaW1lb3V0IjoiMTBzIn0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -190,9 +173,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -240,9 +223,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -294,9 +277,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2024-12-31 06:35:17.160115702 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2024-12-31 06:35:17.160115702 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: network-costs-config
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -7,9 +7,9 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
 spec:
   clusterIP: None
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -7,23 +7,25 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
+  annotations:
 spec:
   updateStrategy:
     type: RollingUpdate
   selector:
     matchLabels:
       app: release-name-network-costs
   template:
     metadata:
+      annotations:
       labels:
         app.kubernetes.io/instance: kubecost
         app.kubernetes.io/name: network-costs
-        helm.sh/chart: cost-analyzer-2.4.3
+        helm.sh/chart: cost-analyzer-2.5.1
         app.kubernetes.io/managed-by: Helm
         app: release-name-network-costs
     spec:
       hostNetwork: true
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2024-12-31 06:35:17.160115702 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-31 06:35:45.382598755 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2024-12-31 06:35:17.160115702 +0000
@@ -4,11 +4,11 @@
 kind: ConfigMap
 metadata:
   name: app-configs
   namespace: default
-  labels: 
+  labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2024-12-31 06:35:17.159115685 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
@@ -24,8 +23,7 @@
     matchNames:
       - default
   selector:
     matchLabels:
-      
       app.kubernetes.io/name: cost-analyzer
       app.kubernetes.io/instance: release-name
       app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2024-12-31 06:35:17.160115702 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-31 06:35:45.381598738 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2024-12-31 06:35:17.160115702 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2024-12-31 06:35:45.383598772 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2024-12-31 06:35:17.162115737 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-network-costs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-31 06:35:45.384598789 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2024-12-31 06:35:17.163115755 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi

@renovate renovate bot changed the title chore(deps): update helm release cost-analyzer to v2.5.1 feat(deps): update helm release cost-analyzer to v2.5.1 Jan 1, 2025
@renovate renovate bot force-pushed the renovate/cost-analyzer-2.x branch from 0a89700 to ce71fd2 Compare January 1, 2025 13:52
Copy link
Contributor Author

renovate bot commented Jan 1, 2025

Edited/Blocked Notification

Renovate will not automatically rebase this PR, because it does not recognize the last commit author and assumes somebody else may have edited the PR.

You can manually request rebase by checking the rebase/retry box above.

⚠️ Warning: custom changes will be lost.

Copy link
Contributor

github-actions bot commented Jan 1, 2025

Changes Default Values
diff -U 4 -r out-default-values/target/kubecost_cost-analyzer_default-values.out out-default-values/pr/kubecost_cost-analyzer_default-values.out
--- out-default-values/target/kubecost_cost-analyzer_default-values.out	2025-01-01 13:53:31.343715010 +0000
+++ out-default-values/pr/kubecost_cost-analyzer_default-values.out	2025-01-01 13:53:03.813372981 +0000
@@ -2,11 +2,12 @@
   # zone: cluster.local (use only if your DNS server doesn't live in the same zone as kubecost)
   prometheus:
     enabled: true  # Kubecost depends on Prometheus data, it is not optional. When enabled: false, Prometheus will not be installed and you must configure your own Prometheus to scrape kubecost as well as provide the fqdn below. -- Warning: Before changing this setting, please read to understand the risks https://docs.kubecost.com/install-and-configure/install/custom-prom
     fqdn: http://cost-analyzer-prometheus-server.default.svc  # example address of a prometheus to connect to. Include protocol (http:// or https://) Ignored if enabled: true
-    # insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
+    insecureSkipVerify: false  # If true, kubecost will not check the TLS cert of prometheus
     # queryServiceBasicAuthSecretName: dbsecret # kubectl create secret generic dbsecret -n kubecost --from-file=USERNAME --from-file=PASSWORD
     # queryServiceBearerTokenSecretName: mcdbsecret  # kubectl create secret generic mcdbsecret -n kubecost --from-file=TOKEN
+    kubeRBACProxy: false  # If true, kubecost will use kube-rbac-proxy to authenticate with in cluster Prometheus for openshift
 
   grafana:
     enabled: true  # If false, Grafana will not be installed
     domainName: cost-analyzer-grafana.default.svc  # example grafana domain Ignored if enabled: true
@@ -53,8 +54,10 @@
   # or `global.prometheus.fqdn=http://{{ template "cost-analyzer.fullname" . }}-mimir-proxy.{{ .Release.Namespace }}.svc:8085/prometheus'
   # Learn more at https://grafana.com/docs/mimir/latest/operators-guide/secure/authentication-and-authorization/#without-an-authenticating-reverse-proxy
   mimirProxy:
     enabled: false
+    ## Annotations to be added to the Mimir Proxy deployment template
+    annotations: {}
     name: mimir-proxy
     image: nginxinc/nginx-unprivileged
     port: 8085
     mimirEndpoint: $mimir_endpoint  # Your Mimir query endpoint. If your Mimir query endpoint is http://example.com/prometheus, replace $mimir_endpoint with http://example.com/
@@ -62,11 +65,10 @@
     # basicAuth:
       # username: user
       # password: pwd
 
-  # Azure Monitor Managed Service for Prometheus
-  # See https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/azure-monitor/essentials/prometheus-metrics-overview.md for information
-  # and https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines for more information on setting this up
+  ## Azure Monitor Managed Service for Prometheus
+  ## Ref: https://learn.microsoft.com/en-us/azure/azure-monitor/essentials/prometheus-remote-write-virtual-machines
   ammsp:
     enabled: false
     prometheusServerEndpoint: http://localhost:8081/
     remoteWriteService: $<AMMSP_METRICS_INGESTION_ENDPOINT>
@@ -83,76 +85,68 @@
       identityType: userAssigned
       aadClientId: $<AZURE_MANAGED_IDENTITY_CLIENT_ID>
       aadTenantId: $<AZURE_MANAGED_IDENTITY_TENANT_ID>
 
+  ## Kubecost Alerting
+  ## Ref: http://docs.kubecost.com/alerts
   notifications:
-    # Kubecost alerting configuration
-    # Ref: http://docs.kubecost.com/alerts
     # alertConfigs:
-      # frontendUrl: http://localhost:9090 # optional, used for linkbacks
-      # globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Slack alerts
-      # globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX # optional, used for Microsoft Teams alerts
-      # globalAlertEmails:
-      #   - [email protected]
-      #   - [email protected]
-      # globalEmailSubject: Custom Subject
-      # Alerts generated by kubecost, about cluster data
-      # alerts:
-        # Daily namespace budget alert on namespace `kubecost`
-        # - type: budget                # supported: budget, recurringUpdate
-        #   threshold: 50               # optional, required for budget alerts
-        #   window: daily               # or 1d
-        #   aggregation: namespace
-        #   filter: kubecost
-        #   ownerContact:               # optional, overrides globalAlertEmails default
-        #     - [email protected]
-        #     - [email protected]
-        #   # optional, used for alert-specific Slack and Microsoft Teams alerts
-        #   slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX
-        #   msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX
-
-        # Daily cluster budget alert on cluster `cluster-one`
-        # - type: budget
-        #   threshold: 200.8        # optional, required for budget alerts
-        #   window: daily           # or 1d
-        #   aggregation: cluster
-        #   filter: cluster-one     # does not accept csv
-
-        # Recurring weekly update (weeklyUpdate alert)
-        # - type: recurringUpdate
-        #   window: weekly          # or 7d
-        #   aggregation: namespace
-        #   filter: '*'
-
-        # Recurring weekly namespace update on kubecost namespace
-        # - type: recurringUpdate
-        #   window: weekly # or 7d
-        #   aggregation: namespace
-        #   filter: kubecost
-
-        # Spend Change Alert
-        # - type: spendChange         # change relative to moving avg
-        #   relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
-        #   window: 1d                # accepts ‘d’, ‘h’
-        #   baselineWindow: 30d       # previous window, offset by window
-        #   aggregation: namespace
-        #   filter: kubecost, default # accepts csv
-
-        # Health Score Alert
-        # - type: health              # Alerts when health score changes by a threshold
-        #   window: 10m
-        #   threshold: 5              # Send Alert if health scores changes by 5 or more
-
-        # Kubecost Health Diagnostic
-        # - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
-        #   window: 10m
+    #   frontendUrl: http://localhost:9090  # Optional
+    #   globalSlackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalMsTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #   globalAlertEmails:
+    #     - [email protected]
+    #     - [email protected]
+    #   globalEmailSubject: Custom Subject
+    #   alerts:
+    #     # Daily namespace budget alert on namespace `kubecost`
+    #     - type: budget                # supported: budget, recurringUpdate
+    #       threshold: 50               # optional, required for budget alerts
+    #       window: daily               # or 1d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #       ownerContact:               # optional, overrides globalAlertEmails default
+    #         - [email protected]
+    #         - [email protected]
+    #       slackWebhookUrl: https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #       msTeamsWebhookUrl: https://xxxxx.webhook.office.com/webhookb2/XXXXXXXXXXXXXXXXXXXXXXXX/IncomingWebhook/XXXXXXXXXXXXXXXXXXXXXXXX  # Optional
+    #     # Daily cluster budget alert on cluster `cluster-one`
+    #     - type: budget
+    #       threshold: 200.8        # optional, required for budget alerts
+    #       window: daily           # or 1d
+    #       aggregation: cluster
+    #       filter: cluster-one     # does not accept csv
+    #     # Recurring weekly update (weeklyUpdate alert)
+    #     - type: recurringUpdate
+    #       window: weekly          # or 7d
+    #       aggregation: namespace
+    #       filter: '*'
+    #     # Recurring weekly namespace update on kubecost namespace
+    #     - type: recurringUpdate
+    #       window: weekly # or 7d
+    #       aggregation: namespace
+    #       filter: kubecost
+    #     # Spend Change Alert
+    #     - type: spendChange         # change relative to moving avg
+    #       relativeThreshold: 0.20   # Proportional change relative to baseline. Must be greater than -1 (can be negative)
+    #       window: 1d                # accepts ‘d’, ‘h’
+    #       baselineWindow: 30d       # previous window, offset by window
+    #       aggregation: namespace
+    #       filter: kubecost, default # accepts csv
+    #     # Health Score Alert
+    #     - type: health              # Alerts when health score changes by a threshold
+    #       window: 10m
+    #       threshold: 5              # Send Alert if health scores changes by 5 or more
+    #     # Kubecost Health Diagnostic
+    #     - type: diagnostic          # Alerts when kubecost is unable to compute costs - ie: Prometheus unreachable
+    #       window: 10m
 
     alertmanager:  # Supply an alertmanager FQDN to receive notifications from the app.
       enabled: false  # If true, allow kubecost to write to your alertmanager
       fqdn: http://cost-analyzer-prometheus-server.default.svc  # example fqdn. Ignored if prometheus.enabled: true
 
-    # Set saved Cost Allocation report(s) accessible from /reports
-    # Ref: http://docs.kubecost.com/saved-reports
+  ## Kubecost Saved Reports
+  ## Ref: http://docs.kubecost.com/saved-reports
   savedReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Example Saved Report 0"
@@ -160,35 +154,32 @@
         aggregateBy: "namespace"
         chartDisplay: "category"
         idle: "separate"
         rate: "cumulative"
-        accumulate: false  # daily resolution
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        accumulate: false   # daily resolution
+        filters:            # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "cluster"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: ":"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: ":"   # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "dev"
       - title: "Example Saved Report 1"
         window: "month"
         aggregateBy: "controllerKind"
         chartDisplay: "category"
         idle: "share"
         rate: "monthly"
         accumulate: false
-        filters:  # Ref: https://docs.kubecost.com/apis/filters-api
+        filters:              # Ref: https://docs.kubecost.com/apis/filters-api
           - key: "namespace"  # Ref: https://docs.kubecost.com/apis/filters-api#allocation-apis-request-sizing-v2-api
-            operator: "!:"  # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
+            operator: "!:"    # Ref: https://docs.kubecost.com/apis/filters-api#filter-operators
             value: "kubecost"
       - title: "Example Saved Report 2"
         window: "2020-11-11T00:00:00Z,2020-12-09T23:59:59Z"
         aggregateBy: "service"
         chartDisplay: "category"
         idle: "hide"
         rate: "daily"
         accumulate: true  # entire window resolution
-        filters: []  # if no filters, specify empty array
-
-  # Set saved Asset report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
+        filters: []       # if no filters, specify empty array
   assetReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
     - title: "Example Asset Report 0"
@@ -197,11 +188,8 @@
       accumulate: false  # daily resolution
       filters:
         - property: "cluster"
           value: "cluster-one"
-
-  # Set saved Cloud Cost report(s) accessible from /reports
-  # Ref: http://docs.kubecost.com/saved-reports
   cloudCostReports:
     enabled: false  # If true, overwrites report parameters set through UI
     reports:
       - title: "Cloud Cost Report 0"
@@ -214,8 +202,12 @@
 
   podAnnotations: {}
     # iam.amazonaws.com/role: role-arn
 
+  # Annotations to be added for all controllers (StatefulSets, Deployments, DaemonSets)
+  annotations: {}
+    # iam.amazonaws.com/role: role-arn
+
   # Applies these labels to all Deployments, StatefulSets, DaemonSets, and their pod templates.
   additionalLabels: {}
 
   securityContext:
@@ -233,8 +225,25 @@
     capabilities:
       drop:
       - ALL
 
+  # Installs custom CA certificates onto Kubecost pods
+  updateCaTrust:
+    enabled: false  # Set to true to enable the init container for updating CA trust
+    # Security context settings for the init container.
+    securityContext:
+      runAsUser: 0
+      runAsGroup: 0
+      runAsNonRoot: false
+      allowPrivilegeEscalation: false
+      readOnlyRootFilesystem: true
+      seccompProfile:
+        type: RuntimeDefault
+    caCertsSecret: ca-certs-secret  # The name of the Secret containing custom CA certificates to mount to the cost-model container.
+    # caCertsConfig: ca-certs-config  # The name of the ConfigMap containing the CA trust configuration.
+    resources: {}  # Resource requests and limits for the init container.
+    caCertsMountPath: /etc/pki/ca-trust/source/anchors  # The path where the custom CA certificates will be mounted in the init container
+
   # Platforms is a higher-level abstraction for platform-specific values and settings.
   platforms:
     # Deploying to OpenShift (OCP) requires enabling this option.
     openshift:
@@ -242,8 +251,15 @@
       route:
         enabled: false  # Create an OpenShift Route.
         annotations: {}  # Add annotations to the Route.
         # host: kubecost.apps.okd4.example.com  # Add a custom host for your Route.
+
+        # OPTIONAL. The following configs only to be enabled when using a Prometheus instance already installed in the cluster.
+        createMonitoringClusterRoleBinding: false  # Create a ClusterRoleBinding to grant the Kubecost serviceaccount access to query Prometheus.
+        createMonitoringResourceReaderRoleBinding: false  # Create a Role and Role Binding to allow Prometheus to list and watch Kubecost resources.
+        monitoringServiceAccountName: prometheus-k8s  # Name of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+        monitoringServiceAccountNamespace: openshift-monitoring  # Namespace of the Prometheus serviceaccount to bind to the Resource Reader Role Binding.
+
       # Create Security Context Constraint resources for the DaemonSets requiring additional privileges.
       scc:
         nodeExporter: false  # Creates an SCC for Prometheus Node Exporter. This requires Node Exporter be enabled.
         networkCosts: false  # Creates an SCC for Kubecost network-costs. This requires network-costs be enabled.
@@ -258,18 +274,24 @@
       skipSanityChecks: false  # If true, skip all sanity/existence checks for resources like Secrets.
 
   ## Kubecost Integrations
   ## Ref: https://docs.kubecost.com/integrations
-  ##
   integrations:
+    turbonomic:
+      enabled: false         # Set to true to enable the Turbonomic integration
+      clientId: ""           # Client ID generated from the OAuth Client created
+      clientSecret: ""       # Client Secret generated from the OAuth Client created
+      role: ""               # Role that the OAuth Client was created with (e.g. ADMINISTRATOR, SITE_ADMIN, etc.)
+      host: ""               # URL to your turbonomic API. EG: https://turbonomic.example.com/
+      insecureClient: false  # Do not verify certificate
     postgres:
       enabled: false
-      runInterval: "12h"  # How frequently to run the integration.
-      databaseHost: ""  # REQUIRED. ex: my.postgres.database.azure.com
-      databasePort: ""  # REQUIRED. ex: 5432
-      databaseName: ""  # REQUIRED. ex: postgres
-      databaseUser: ""  # REQUIRED. ex: myusername
-      databasePassword: ""  # REQUIRED. ex: mypassword
+      runInterval: "12h"      # How frequently to run the integration.
+      databaseHost: ""        # REQUIRED. ex: my.postgres.database.azure.com
+      databasePort: ""        # REQUIRED. ex: 5432
+      databaseName: ""        # REQUIRED. ex: postgres
+      databaseUser: ""        # REQUIRED. ex: myusername
+      databasePassword: ""    # REQUIRED. ex: mypassword
       databaseSecretName: ""  # OPTIONAL. Specify your own k8s secret containing the above credentials. Must have key "creds.json".
 
       ## Configure what Postgres table to write to, and what parameters to pass
       ## when querying Kubecost's APIs. Ensure all parameters are enclosed in
@@ -303,8 +325,12 @@
 # nameOverride: ""
 ## Provide a full name override option for the chart.
 # fullnameOverride: ""
 
+## Provide additional labels for the chart.
+# chartLabels:
+#   app.kubernetes.io/name: kubecost-cost-analyzer
+
 ## This flag is only required for users upgrading to a new version of Kubecost.
 ## The flag is used to ensure users are aware of important
 ## (potentially breaking) changes included in the new version.
 ##
@@ -322,79 +348,77 @@
     region: "us-east-1"
     URI: s3://kc-csv-test/pricing_schema.csv  # a valid file URI
     csvAccessCredentials: pricing-schema-access-secret
 
-# SAML integration for user management and RBAC, enterprise key required
-# Ref: https://github.com/kubecost/docs/blob/main/user-management.md
+## Kubecost SAML (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-saml
 saml:
   enabled: false
-  # secretName: "kubecost-authzero"
-  # metadataSecretName: "kubecost-authzero-metadata" # One of metadataSecretName or idpMetadataURL must be set. defaults to metadataURL if set
-  # idpMetadataURL: "https://dev-elu2z98r.auth0.com/samlp/metadata/c6nY4M37rBP0qSO1IYIqBPPyIPxLS8v2"
-  # appRootURL: "http://localhost:9090" # sample URL
-  # authTimeout: 1440 # number of minutes the JWT will be valid
-  # redirectURL: "https://dev-elu2z98r.auth0.com/v2/logout" # callback URL redirected to after logout
-  # audienceURI: "http://localhost:9090" # by convention, the same as the appRootURL, but any string uniquely identifying kubecost to your samp IDP. Optional if you follow the convention
-  # nameIDFormat: "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified" If your SAML provider requires a specific nameid format
-  # isGLUUProvider: false # An additional URL parameter must be appended for GLUU providers
-  # encryptionCertSecret: "kubecost-saml-cert" # k8s secret where the x509 certificate used to encrypt an Okta saml response is stored
-  # decryptionKeySecret: "kubecost-sank-decryption-key" # k8s secret where the private key associated with the encryptionCertSecret is stored
-  # authSecret: "random-string" # value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
-  # authSecretName: "kubecost-saml-secret" # name of k8s secret where the authSecret will be stored, defaults to "kubecost-saml-secret" if not provided
+  # secretName: ""
+  # metadataSecretName: ""  # One of metadataSecretName or idpMetadataURL must be set. Defaults to idpMetadataURL if set.
+  # idpMetadataURL: ""
+  # appRootURL: ""
+  # authTimeout: 1440  # Number of minutes the JWT will be valid
+  # redirectURL: ""  # Callback URL redirected to after logout
+  # audienceURI: ""  # Usually the same as the appRootURL. Optionally any string uniquely identifying kubecost to your SAML IDP.
+  # nameIDFormat: ""  # If your SAML provider requires a specific nameid format
+  # isGLUUProvider: false  # An additional URL parameter must be appended for GLUU providers
+  # encryptionCertSecret: ""  # K8s secret storing the x509 certificate used to encrypt an Okta SAML response
+  # decryptionKeySecret: ""  # K8s secret storing the private key associated with the encryptionCertSecret
+  # authSecret: ""  # Value of SAML secret used to issue tokens, will be autogenerated as random string if not provided
+  # authSecretName: ""  # Name of K8s secret where the authSecret will be stored. Defaults to "kubecost-saml-secret" if not provided.
   rbac:
     enabled: false
     # groups:
     #   - name: admin
-    #     enabled: false # if admin is disabled, all SAML users will be able to make configuration changes to the kubecost frontend
-    #     assertionName: "http://schemas.auth0.com/userType" # a SAML Assertion, one of whose elements has a value that matches on of the values in assertionValues
+    #     enabled: false  # If admin is disabled, all SAML users will be able to make configuration changes to the Kubecost frontend
+    #     assertionName: ""
     #     assertionValues:
     #       - "admin"
     #       - "superusers"
     #   - name: readonly
-    #     enabled: false # if readonly is disabled, all users authorized on SAML will default to readonly
-    #     assertionName:  "http://schemas.auth0.com/userType"
+    #     enabled: false  # If readonly is disabled, all users authorized on SAML will default to readonly
+    #     assertionName: ""
     #     assertionValues:
     #       - "readonly"
     #   - name: editor
-    #     enabled: true # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
-    #     assertionName: "http://schemas.auth0.com/userType"
+    #     enabled: true  # If editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #     assertionName: ""
     #     assertionValues:
     #       - "editor"
 
+## Kubecost OIDC (enterprise key required)
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/user-management-oidc
 oidc:
   enabled: false
-  clientID: ""  # application/client client_id parameter obtained from provider, used to make requests to server
-  clientSecret: ""  # application/client client_secret parameter obtained from provider, used to make requests to server
-  # secretName: "kubecost-oidc-secret" # k8s secret where clientsecret will be stored
-  # For use to provide a custom OIDC Secret. Overrides the usage of oidc.clientSecret and oidc.secretName.
-  # Should contain the field directly.
-  # Can be created using raw k8s secrets, external secrets, sealed secrets, or any other method.
+  clientID: ""  # Application client_id parameter obtained from provider. Used to make requests to server.
+  clientSecret: ""  # Application/client client_secret parameter obtained from provider. Used to make requests to server.
+  secretName: "kubecost-oidc-secret"  # K8s secret where clientsecret will be stored
   existingCustomSecret:
     enabled: false
-    name: ""  # name of the secret containing the client secret
-
-  # authURL: "https://my.auth.server/authorize" # endpoint for login to auth server
-  # loginRedirectURL: "http://my.kubecost.url/model/oidc/authorize" # Kubecost url configured in provider for redirect after authentication
-  # discoveryURL: "https://my.auth.server/.well-known/openid-configuration" # url for OIDC endpoint discovery
-  skipOnlineTokenValidation: false  # if true, will skip accessing OIDC introspection endpoint for online token verification, and instead try to locally validate JWT claims
-  useClientSecretPost: false  # if true, client secret will specifically only use client_secret_post method, otherwise it will attempt to send the secret in both the header and the body.
-  # hostedDomain: "example.com" # optional, blocks access to the auth domain specified in the hd claim of the provider ID token
+    name: ""  # Name of an existing clientSecret. Overrides the usage of oidc.clientSecret and oidc.secretName.
+  authURL: ""  # Authorization endpoint for your identity provider
+  loginRedirectURL: ""  # Kubecost URL endpoint which handles auth flow
+  discoveryURL: ""  # Your identity provider's endpoint sharing OIDC configuration
+  skipOnlineTokenValidation: false  # If true, validate JWT claims locally
+  useClientSecretPost: false  # If true, only use client_secret_post method. Otherwise attempt to send the secret in both the header and the body.
+  hostedDomain: ""  # Optional, blocks access to the auth domain specified in the hd claim of the provider ID token
   rbac:
     enabled: false
     # groups:
-    #   - name: admin
-    #     enabled: false # if admin is disabled, all authenticated users will be able to make configuration changes to the kubecost frontend
-    #     claimName: "roles" # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
-    #     claimValues: # Kubecost matches these strings with the roles created in your identity provider
+    #   - name: admin  # Admins have permissions to edit Kubecost settings and save reports
+    #     enabled: false
+    #     claimName: "roles"  # Kubecost matches this string against the JWT's payload key containing RBAC info (this value is unique across identity providers)
+    #     claimValues:  # Kubecost matches these strings with the roles created in your identity provider
     #       - "admin"
     #       - "superusers"
-    #   - name: readonly
-    #     enabled: false # if readonly is disabled, all authenticated users will default to readonly
-    #     claimName:  "roles"
+    #   - name: readonly  # Readonly users do not have permissions to edit Kubecost settings or save reports.
+    #     enabled: false
+    #     claimName: "roles"
     #     claimValues:
     #       - "readonly"
-    #   - name: editor
-    #     enabled: false # if editor is enabled, editors will be allowed to edit reports/alerts scoped to them, and act as readers otherwise. Users will never default to editor.
+    #   - name: editor  # Editors have permissions to edit reports/alerts and act as readers otherwise
+    #     enabled: false
     #     claimName: "roles"
     #     claimValues:
     #       - "editor"
 
@@ -435,25 +459,14 @@
   resources:
     requests:
       cpu: "10m"
       memory: "55Mi"
-    # limits:
-    #   cpu: "100m"
-    #   memory: "256Mi"
   deploymentStrategy: {}
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
-
-  # Define a readiness probe for the Kubecost frontend container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
     failureThreshold: 6
-
-  # Define a liveness probe for the Kubecost frontend container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 1
     periodSeconds: 5
@@ -495,49 +508,8 @@
   # emitNamespaceAnnotations: false
   # emitKsmV1Metrics: true # emit all KSM metrics in KSM v1.
   # emitKsmV1MetricsOnly: false # emit only the KSM metrics missing from KSM v2. Advanced users only.
 
-  # Optional
-  # The metrics exporter is a separate deployment and service (for prometheus scrape auto-discovery)
-  # which emits metrics cost-model relies on. Enabling this deployment also removes the KSM dependency
-  # from the cost-model. If the deployment is not enabled, the metrics will continue to be emitted from
-  # the cost-model.
-  exporter:
-    enabled: false
-    port: 9005
-    # Adds the default Prometheus scrape annotations to the metrics exporter service.
-    # Set to false and use service.annotations (below) to set custom scrape annotations.
-    prometheusScrape: true
-    resources: {}
-      # requests:
-      #  cpu: "200m"
-      #  memory: "55Mi"
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    tolerations: []
-
-    #  - key: "key"
-    #    operator: "Equal|Exists"
-    #    value: "value"
-    #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-    affinity: {}
-
-    service:
-      annotations: {}
-
-    # Service Monitor for Kubecost Metrics
-    serviceMonitor:  # the kubecost included prometheus uses scrapeConfigs and does not support service monitors. The following options assume an existing prometheus that supports serviceMonitors.
-      enabled: false
-      additionalLabels: {}
-      metricRelabelings: []
-      relabelings: []
-    ## PriorityClassName
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
-    priorityClassName: ""
-    additionalLabels: {}
-    nodeSelector: {}
-    extraArgs: []
-
 sigV4Proxy:
   image: public.ecr.aws/aws-observability/aws-sigv4-proxy:latest
   imagePullPolicy: IfNotPresent
   name: aps
@@ -549,9 +521,8 @@
   # - name: AWS_ACCESS_KEY_ID
   #   value: <access_key>
   # - name: AWS_SECRET_ACCESS_KEY
   #   value: <secret_key>
-  # Optional resource requests and limits for the sigV4proxy container.
   resources: {}
 
 kubecostModel:
   image: "gcr.io/kubecost1/cost-model"
@@ -559,17 +530,14 @@
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for cost-model.
   # fullImageName:
 
+  # Log level for the cost model container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
+  logLevel: info
+
   # securityContext:
   #   readOnlyRootFilesystem: true
 
-  # Build local cost allocation cache
-  warmCache: false
-  # Run allocation ETL pipelines
-  etl: true
-  # Enable the ETL filestore backing storage
-  etlFileStoreEnabled: true
   # The total number of days the ETL pipelines will build
   # Set to 0 to disable daily ETL (not recommended)
   etlDailyStoreDurationDays: 91
   # The total number of hours the ETL pipelines will build
@@ -695,16 +663,13 @@
     # limits:
     #   cpu: "800m"
     #   memory: "256Mi"
 
-  # Define a readiness probe for the Kubecost cost-model container.
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the Kubecost cost-model container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -712,43 +677,18 @@
   extraArgs: []
 
   # Optional. A list of extra environment variables to be added to the cost-model container.
   # extraEnv:
-  #   - name: LOG_LEVEL
-  #     value: trace
   #   - name: LOG_FORMAT
   #     value: json
   #   # When false, Kubecost will not show Asset costs for local disks physically
   #   # attached to nodes (e.g. ephemeral storage). This needs to be applied to
   #   # each cluster monitored.
   #   - name: ASSET_INCLUDE_LOCAL_DISK_COST
   #     value: "true"
 
-  # creates an ingress directly to the model container, for API access
-  ingress:
-    enabled: false
-    # className: nginx
-    labels:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    annotations:
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    paths: ["/"]
-    pathType: ImplementationSpecific
-    hosts:
-      - cost-analyzer-model.local
-    tls: []
-    #  - secretName: cost-analyzer-model-tls
-    #    hosts:
-    #      - cost-analyzer-model.local
   utcOffset: "+00:00"
-  # Optional - add extra ports to the cost-model container. For kubecost development purposes only - not recommended for users.
   extraPorts: []
-    # - name: debug
-    #   port: 40000
-    #   targetPort: 40000
-    #   containerPort: 40000
 
 ## etlUtils is a utility typically used by Enterprise customers transitioning
 ## from v1 to v2 of Kubecost. It translates the data from the "/etl" dir of the
 ## bucket, to the "/federated" dir of the bucket.
@@ -760,8 +700,10 @@
   resources: {}
   env: {}
   nodeSelector: {}
   tolerations: []
+  ## Annotations to be added to etlutils deployment
+  annotations: {}
   affinity: {}
 
 # Basic Kubecost ingress, more examples available at https://docs.kubecost.com/install-and-configure/install/ingress-examples
 ingress:
@@ -782,77 +724,25 @@
   #    hosts:
   #      - cost-analyzer.local
 
 nodeSelector: {}
-
 tolerations: []
-#  - key: "key"
-#    operator: "Equal|Exists"
-#    value: "value"
-#    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
 affinity: {}
-
 topologySpreadConstraints: []
-
-# If true, creates a PriorityClass to be used by the cost-analyzer pod
 priority:
   enabled: false
-  name: ""  # Provide name of existing priority class only. If left blank, upstream chart will create one from default template.
-
-# If true, enable creation of NetworkPolicy resources.
-networkPolicy:
-  enabled: false
-  denyEgress: true  # create a network policy that denies egress from kubecost
-  sameNamespace: true  # Set to true if cost analyzer and prometheus are on the same namespace
-#  namespace: kubecost # Namespace where prometheus is installed
-
-  # Cost-analyzer specific vars using the new template
-  costAnalyzer:
-    enabled: false  # If true, create a network policy for cost-analyzer
-    annotations: {}  # annotations to be added to the network policy
-    additionalLabels: {}  # additional labels to be added to the network policy
-    # Examples rules:
-    # ingressRules:
-    #   - selectors: # allow ingress from self on all ports
-    #     - podSelector:
-    #         matchLabels:
-    #           app.kubernetes.io/name: cost-analyzer
-    #   - selectors: # allow egress access to prometheus
-    #     - namespaceSelector:
-    #         matchLabels:
-    #           name: prometheus
-    #       podSelector:
-    #         matchLabels:
-    #           app: prometheus
-    #     ports:
-    #       - protocol: TCP
-    #         port: 9090
-    # egressRules:
-    #   - selectors: # restrict egress to inside cluster
-    #     - namespaceSelector: {}
-
-## @param extraVolumes A list of volumes to be added to the pod
-##
+  name: ""
 extraVolumes: []
-## @param extraVolumeMounts A list of volume mounts to be added to the pod
-##
 extraVolumeMounts: []
 
 # Define persistence volume for cost-analyzer, more information at https://docs.kubecost.com/install-and-configure/install/storage
 persistentVolume:
   size: 32Gi
-  dbSize: 32.0Gi
   enabled: true  # Note that setting this to false means configurations will be wiped out on pod restart.
   # storageClass: "-" #
   # existingClaim: kubecost-cost-analyzer # a claim in the same namespace as kubecost
   labels: {}
   annotations: {}
-    # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-  # Enables a separate PV specifically for ETL data. This should be avoided, but
-  # is kept for legacy compatibility.
-  dbPVEnabled: false
 
 service:
   type: ClusterIP
   port: 9090
@@ -873,20 +763,15 @@
 
   rbac:
     create: true  # Create the RBAC resources for Prometheus.
 
-  ## Define serviceAccount names for components. Defaults to component's fully qualified name.
-  ##
   serviceAccounts:
     alertmanager:
       create: true
       name:
     nodeExporter:
       create: true
       name:
-    pushgateway:
-      create: true
-      name:
     server:
       create: true
       name:
       ## Prometheus server ServiceAccount annotations.
@@ -897,9 +782,8 @@
   ##
   # selfsignedCertConfigMapName: ""
 
   imagePullSecrets:
-  # - name: "image-pull-secret"
 
   extraScrapeConfigs: |
     - job_name: kubecost
       honor_labels: true
@@ -939,9 +823,9 @@
         {{- end }}
     ## Enables scraping of NVIDIA GPU metrics via dcgm-exporter. Scrapes all
     ## endpoints which contain "dcgm-exporter" in labels "app",
     ## "app.kubernetes.io/component", or "app.kubernetes.io/name" with a case
-    ## insensitive match.
+    ## insensitive match. The label must be present on the K8s service endpoints and not just pods.
     ## Refs:
     ## https://github.com/NVIDIA/gpu-operator/blob/d4316a415bbd684ce8416a88042305fc1a093aa4/assets/state-dcgm-exporter/0600_service.yaml#L7
     ## https://github.com/NVIDIA/dcgm-exporter/blob/54fd1ca137c66511a87a720390613680b9bdabdd/deployment/templates/service.yaml#L23
     - job_name: kubecost-dcgm-exporter
@@ -961,381 +845,122 @@
 
     ## Provide a full name override for the Prometheus server.
     # fullnameOverride: ""
 
-    ## Prometheus server container name
-    ##
     enabled: true
     name: server
     sidecarContainers:
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## Prometheus server container image
-    ##
     image:
       repository: quay.io/prometheus/prometheus
       tag: v2.55.1
       pullPolicy: IfNotPresent
-
-    ## prometheus server priorityClassName
-    ##
     priorityClassName: ""
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
-    ## Maybe same with Ingress host name
     baseURL: ""
-
-    ## Additional server container environment variables
-    ##
-    ## You specify this manually like you would a raw deployment manifest.
-    ## This means you can bind in environment variables from secrets.
-    ##
-    ## e.g. static environment variable:
-    ##  - name: DEMO_GREETING
-    ##    value: "Hello from the environment"
-    ##
-    ## e.g. secret environment variable:
-    ## - name: USERNAME
-    ##   valueFrom:
-    ##     secretKeyRef:
-    ##       name: mysecret
-    ##       key: username
     env: []
-
     extraFlags:
       - web.enable-lifecycle
-      ## web.enable-admin-api flag controls access to the administrative HTTP API which includes functionality such as
-      ## deleting time series. This is disabled by default.
-      # - web.enable-admin-api
-      ##
-      ## storage.tsdb.no-lockfile flag controls BD locking
-      # - storage.tsdb.no-lockfile
-      ##
-      ## storage.tsdb.wal-compression flag enables compression of the write-ahead log (WAL)
-      # - storage.tsdb.wal-compression
-
-    ## Path to a configuration file on prometheus server container FS
     configPath: /etc/config/prometheus.yml
-
     global:
-      ## How frequently to scrape targets by default
-      ##
       scrape_interval: 1m
-      ## How long until a scrape request times out
-      ##
       scrape_timeout: 60s
-      ## How frequently to evaluate rules
-      ##
       evaluation_interval: 1m
       external_labels:
         cluster_id: cluster-one  # Each cluster should have a unique ID
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
-    ##
     remoteWrite: {}
-    ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_read
-    ##
     remoteRead: {}
-
-    ## Additional Prometheus server container arguments
-    ##
     extraArgs:
       query.max-concurrency: 1
       query.max-samples: 100000000
-
-    ## Additional InitContainers to initialize the pod
-    ##
     extraInitContainers: []
-
-    ## Additional Prometheus server Volume mounts
-    ##
     extraVolumeMounts: []
-
-    ## Additional Prometheus server Volumes
-    ##
     extraVolumes: []
-
-    ## Additional Prometheus server hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: certs-dir
-      #   mountPath: /etc/kubernetes/certs
-      #   subPath: ""
-      #   hostPath: /etc/kubernetes/certs
-      #   readOnly: true
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   subPath: ""
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Additional Prometheus server Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: prom-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.server.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/server-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
     ingress:
-      ## If true, Prometheus server Ingress will be created
-      ##
       enabled: false
       # className: nginx
-
-      ## Prometheus server Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## Prometheus server Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## Prometheus server Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - prometheus.domain.com
-      #   - domain.com/prometheus
-
-      ## PathType determines the interpretation of the Path matching
       pathType: "Prefix"
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## Prometheus server Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-server-tls
-      #     hosts:
-      #       - prometheus.domain.com
-
-    ## Server Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for server scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for Prometheus server pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, Prometheus server will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## Prometheus server data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## Prometheus server data Persistent Volume annotations
-      ##
       annotations: {}
-        # helm.sh/resource-policy: keep  # https://helm.sh/docs/howto/charts_tips_and_tricks/#tell-helm-not-to-uninstall-a-resource
-
-      ## Prometheus server data Persistent Volume existing claim name
-      ## Requires server.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## Prometheus server data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## Prometheus server data Persistent Volume size
-      ##
       size: 32Gi
-
-      ## Prometheus server data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## Prometheus server data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of Prometheus server data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
     emptyDir:
       sizeLimit: ""
-
-    ## Annotations to be added to Prometheus server pods
-    ##
     podAnnotations: {}
-      # iam.amazonaws.com/role: prometheus
-
-    ## Annotations to be added to the Prometheus Server deployment
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to Prometheus server pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Prometheus AlertManager configuration
-    ##
     alertmanagers: []
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
       annotations: {}
       labels: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
         servicePort: 80
-
-    ## Prometheus server readiness and liveness probe initial delay and timeout
-    ## Ref: https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/
-    ##
     readinessProbeInitialDelay: 5
     readinessProbeTimeout: 3
     readinessProbeFailureThreshold: 3
     readinessProbeSuccessThreshold: 1
     livenessProbeInitialDelay: 5
     livenessProbeTimeout: 3
     livenessProbeFailureThreshold: 3
     livenessProbeSuccessThreshold: 1
-
-    ## Prometheus server resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 500m
-      #   memory: 512Mi
-      # requests:
-      #   cpu: 500m
-      #   memory: 512Mi
-
-    ## Vertical Pod Autoscaler config
-    ## Ref: https://github.com/kubernetes/autoscaler/tree/master/vertical-pod-autoscaler
     verticalAutoscaler:
-      ## If true a VPA object will be created for the controller (either StatefulSet or Deployment, based on above configs)
       enabled: false
       ## Optional. Defaults to "Auto" if not specified.
       # updateMode: "Auto"
       ## Mandatory. Without, VPA will not be created.
       # containerPolicies:
       # - containerName: 'prometheus-server'
-
-    ## Security context to be added to server pods
-    ##
     securityContext: {}
-      # runAsUser: 1001
-      # runAsNonRoot: true
-      # runAsGroup: 1001
-      # fsGroup: 1001
-
     containerSecurityContext: {}
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-      # nodePort: ""
-
-      ## List of IP addresses at which the Prometheus server service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       sessionAffinity: None
       type: ClusterIP
-
-      ## Enable gRPC port on service to allow auto discovery with thanos-querier
       gRPC:
         enabled: false
         servicePort: 10901
-        # nodePort: 10901
-
-      ## If using a statefulSet (statefulSet.enabled=true), configure the
-      ## service to connect to a specific replica to have a consistent view
-      ## of the data.
       statefulsetReplica:
         enabled: false
         replica: 0
-
-    ## Prometheus server pod termination grace period
-    ##
     terminationGracePeriodSeconds: 300
 
     ## Prometheus data retention period (default if not specified is 97 hours)
     ##
@@ -1366,292 +991,92 @@
     # retentionSize: should be significantly greater than the storage used in the number of hours set in etlHourlyStoreDurationHours
 
   # Install Prometheus Alert Manager
   alertmanager:
-    ## If false, alertmanager will not be installed
-    ##
     enabled: false
-
     ## Provide a full name override for Prometheus alertmanager.
     # fullnameOverride: ""
-
     strategy:
       type: Recreate
       rollingUpdate: null
-
-    ## alertmanager container name
-    ##
     name: alertmanager
-
-    ## alertmanager container image
-    ##
     image:
       repository: quay.io/prometheus/alertmanager
       tag: v0.27.0
       pullPolicy: IfNotPresent
-
-    ## alertmanager priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Additional alertmanager container arguments
-    ##
     extraArgs: {}
-
-    ## The URL prefix at which the container can be accessed. Useful in the case the '-web.external-url' includes a slug
-    ## so that the various internal URLs are still able to access as they are in the default case.
-    ## (Optional)
     prefixURL: ""
-
-    ## External URL which can access alertmanager
     baseURL: "http://localhost:9093"
-
-    ## Additional alertmanager container environment variable
-    ## For instance to add a http_proxy
-    ##
     extraEnv: {}
-
-    ## Additional alertmanager Secret mounts
-    # Defines additional mounts with secrets. Secrets must be manually created in the namespace.
     extraSecretMounts: []
-      # - name: secret-files
-      #   mountPath: /etc/secrets
-      #   subPath: ""
-      #   secretName: alertmanager-secret-files
-      #   readOnly: true
-
-    ## ConfigMap override where fullname is {{.Release.Name}}-{{.Values.alertmanager.configMapOverrideName}}
-    ## Defining configMapOverrideName will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configMapOverrideName: ""
-
-    ## The name of a secret in the same kubernetes namespace which contains the Alertmanager config
-    ## Defining configFromSecret will cause templates/alertmanager-configmap.yaml
-    ## to NOT generate a ConfigMap resource
-    ##
     configFromSecret: ""
-
-    ## The configuration file name to be loaded to alertmanager
-    ## Must match the key within configuration loaded from ConfigMap/Secret
-    ##
     configFileName: alertmanager.yml
-
     ingress:
-      ## If true, alertmanager Ingress will be created
-      ##
       enabled: false
-
-      ## alertmanager Ingress annotations
-      ##
       annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## alertmanager Ingress additional labels
-      ##
       extraLabels: {}
-
-      ## alertmanager Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
       hosts: []
-      #   - alertmanager.domain.com
-      #   - domain.com/alertmanager
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
       extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## alertmanager Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
       tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - alertmanager.domain.com
-
-    ## Alertmanager Deployment Strategy type
     # strategy:
     #   type: Recreate
-
-    ## Node tolerations for alertmanager scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for alertmanager pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Pod affinity
-    ##
     affinity: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
     # schedulerName:
-
     persistentVolume:
-      ## If true, alertmanager will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
       enabled: true
-
-      ## alertmanager data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
       accessModes:
         - ReadWriteOnce
-
-      ## alertmanager data Persistent Volume Claim annotations
-      ##
       annotations: {}
-
-      ## alertmanager data Persistent Volume existing claim name
-      ## Requires alertmanager.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
       existingClaim: ""
-
-      ## alertmanager data Persistent Volume mount root path
-      ##
       mountPath: /data
-
-      ## alertmanager data Persistent Volume size
-      ##
       size: 2Gi
-
-      ## alertmanager data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
       # storageClass: "-"
-
-      ## alertmanager data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
       # volumeBindingMode: ""
-
-      ## Subdirectory of alertmanager data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
       subPath: ""
-
-    ## Annotations to be added to alertmanager pods
-    ##
     podAnnotations: {}
-      ## Tell prometheus to use a specific set of alertmanager pods
-      ## instead of all alertmanager pods found in the same namespace
-      ## Useful if you deploy multiple releases within the same namespace
-      ##
-      ## prometheus.io/probe: alertmanager-teamA
-
-    ## Labels to be added to Prometheus AlertManager pods
-    ##
+    annotations: {}
     podLabels: {}
-
-    ## Use a StatefulSet if replicaCount needs to be greater than 1 (see below)
-    ##
     replicaCount: 1
-
     statefulSet:
-      ## If true, use a statefulset instead of a deployment for pod management.
-      ## This allows to scale replicas to more than 1 pod
-      ##
       enabled: false
-
+      annotations: {}
       podManagementPolicy: OrderedReady
-
-      ## Alertmanager headless service to use for the statefulset
-      ##
       headless:
         annotations: {}
         labels: {}
-
-        ## Enabling peer mesh service end points for enabling the HA alert manager
-        ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
         # enableMeshPeer : true
-
         servicePort: 80
-
-    ## alertmanager resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to alertmanager pods
-    ##
     securityContext:
       runAsUser: 1001
       runAsNonRoot: true
       runAsGroup: 1001
       fsGroup: 1001
-
     service:
       annotations: {}
       labels: {}
       clusterIP: ""
-
-      ## Enabling peer mesh service end points for enabling the HA alert manager
-      ## Ref: https://github.com/prometheus/alertmanager/blob/master/README.md
       # enableMeshPeer : true
-
-      ## List of IP addresses at which the alertmanager service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 80
       # nodePort: 30000
       sessionAffinity: None
       type: ClusterIP
 
-    # Define a custom scheduler for Alertmanager pods
-    # schedulerName: default-scheduler
-
-  ## alertmanager ConfigMap entries
-  ##
   alertmanagerFiles:
     alertmanager.yml:
       global: {}
-        # slack_api_url: ''
-
       receivers:
         - name: default-receiver
-          # slack_configs:
-          #  - channel: '@you'
-          #    send_resolved: true
-
       route:
         group_wait: 10s
         group_interval: 5m
         receiver: default-receiver
@@ -1659,87 +1084,32 @@
 
   ## Monitors ConfigMap changes and POSTs to a URL
   configmapReload:
     prometheus:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
-
-      ## configmap-reload container securityContext
       containerSecurityContext: {}
 
     alertmanager:
-      ## If false, the configmap-reload container will not be deployed
-      ##
       enabled: false
-
-      ## configmap-reload container name
-      ##
       name: configmap-reload
-
-      ## configmap-reload container image
-      ##
       image:
         repository: quay.io/prometheus-operator/prometheus-config-reloader
         tag: v0.78.2
         pullPolicy: IfNotPresent
-
-      ## Additional configmap-reload container arguments
-      ##
       extraArgs: {}
-      ## Additional configmap-reload volume directories
-      ##
       extraVolumeDirs: []
-
-
-      ## Additional configmap-reload mounts
-      ##
       extraConfigmapMounts: []
-        # - name: prometheus-alerts
-        #   mountPath: /etc/alerts.d
-        #   subPath: ""
-        #   configMap: prometheus-alerts
-        #   readOnly: true
-
-
-      ## configmap-reload resource requests and limits
-      ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-      ##
       resources: {}
 
-  # node-export must be disabled if there is an existing daemonset: https://guide.kubecost.com/hc/en-us/articles/4407601830679-Troubleshoot-Install#a-name-node-exporter-a-issue-failedscheduling-kubecost-prometheus-node-exporter
   nodeExporter:
     ## If false, node-exporter will not be installed.
     ## This is disabled by default in Kubecost 2.0, though it can be enabled as needed.
     ##
@@ -1747,346 +1117,59 @@
 
     ## Provide a full name override for node exporter.
     # fullnameOverride: ""
 
-    ## If true, node-exporter pods share the host network namespace
-    ##
     hostNetwork: true
-
-    ## If true, node-exporter pods share the host PID namespace
-    ##
     hostPID: true
-
-    ## node-exporter dns policy
-    ##
     dnsPolicy: ClusterFirstWithHostNet
-
-    ## node-exporter container name
-    ##
     name: node-exporter
-
-    ## node-exporter container image
-    ##
     image:
       repository: prom/node-exporter
       tag: v1.8.2
       pullPolicy: IfNotPresent
-
-    ## node-exporter priorityClassName
-    ##
     priorityClassName: ""
-
-    ## Custom Update Strategy
-    ##
     updateStrategy:
       type: RollingUpdate
-
-    ## Additional node-exporter container arguments
-    ##
     extraArgs: {}
-
-    ## Additional node-exporter hostPath mounts
-    ##
     extraHostPathMounts: []
-      # - name: textfile-dir
-      #   mountPath: /srv/txt_collector
-      #   hostPath: /var/lib/node-exporter
-      #   readOnly: true
-      #   mountPropagation: HostToContainer
-
     extraConfigmapMounts: []
-      # - name: certs-configmap
-      #   mountPath: /prometheus
-      #   configMap: certs-configmap
-      #   readOnly: true
-
-    ## Set a custom affinity for node-exporter
-    ##
     # affinity:
-
-    ## Node tolerations for node-exporter scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
     tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for node-exporter pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
     nodeSelector: {}
-
-    ## Annotations to be added to node-exporter pods
-    ##
     podAnnotations: {}
-
-    ## Annotations to be added to the node-exporter DaemonSet
-    ##
-    deploymentAnnotations: {}
-
-    ## Labels to be added to node-exporter pods
-    ##
+    annotations: {}
     pod:
       labels: {}
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
     podDisruptionBudget:
       enabled: false
       maxUnavailable: 1
-
-    ## node-exporter resource limits & requests
-    ## Ref: https://kubernetes.io/docs/user-guide/compute-resources/
-    ##
     resources: {}
-      # limits:
-      #   cpu: 200m
-      #   memory: 50Mi
-      # requests:
-      #   cpu: 100m
-      #   memory: 30Mi
-
-    ## Security context to be added to node-exporter pods
-    ##
     securityContext: {}
-      # runAsUser: 0
-
     service:
       annotations:
         prometheus.io/scrape: "true"
       labels: {}
-
-      # Exposed as a headless service:
-      # https://kubernetes.io/docs/concepts/services-networking/service/#headless-services
       clusterIP: None
-
-      ## List of IP addresses at which the node-exporter service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
       externalIPs: []
-
       hostPort: 9100
       loadBalancerIP: ""
       loadBalancerSourceRanges: []
       servicePort: 9100
       type: ClusterIP
 
-  # Install Prometheus Push Gateway.
-  pushgateway:
-    ## If false, pushgateway will not be installed
-    ##
-    enabled: false
-
-    ## Provide a full name override for Prometheus push gateway.
-    # fullnameOverride: ""
-
-    ## Use an alternate scheduler, e.g. "stork".
-    ## ref: https://kubernetes.io/docs/tasks/administer-cluster/configure-multiple-schedulers/
-    ##
-    # schedulerName:
-
-    ## pushgateway container name
-    ##
-    name: pushgateway
-
-    ## pushgateway container image
-    ##
-    image:
-      repository: prom/pushgateway
-      tag: v1.9.0
-      pullPolicy: IfNotPresent
-
-    ## pushgateway priorityClassName
-    ##
-    priorityClassName: ""
-
-    ## Additional pushgateway container arguments
-    ##
-    ## for example: persistence.file: /data/pushgateway.data
-    extraArgs: {}
-
-    ingress:
-      ## If true, pushgateway Ingress will be created
-      ##
-      enabled: false
-
-      ## pushgateway Ingress annotations
-      ##
-      annotations: {}
-      #   kubernetes.io/ingress.class: nginx
-      #   kubernetes.io/tls-acme: 'true'
-
-      ## pushgateway Ingress hostnames with optional path
-      ## Must be provided if Ingress is enabled
-      ##
-      hosts: []
-      #   - pushgateway.domain.com
-      #   - domain.com/pushgateway
-
-      ## Extra paths to prepend to every host configuration. This is useful when working with annotation based services.
-      extraPaths: []
-      # - path: /*
-      #   backend:
-      #     serviceName: ssl-redirect
-      #     servicePort: use-annotation
-
-      ## pushgateway Ingress TLS configuration
-      ## Secrets must be manually created in the namespace
-      ##
-      tls: []
-      #   - secretName: prometheus-alerts-tls
-      #     hosts:
-      #       - pushgateway.domain.com
-
-    ## Node tolerations for pushgateway scheduling to nodes with taints
-    ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-    ##
-    tolerations: []
-      # - key: "key"
-      #   operator: "Equal|Exists"
-      #   value: "value"
-      #   effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
-    ## Node labels for pushgateway pod assignment
-    ## Ref: https://kubernetes.io/docs/user-guide/node-selection/
-    ##
-    nodeSelector: {}
-
-    ## Annotations to be added to pushgateway pods
-    ##
-    podAnnotations: {}
-
-    replicaCount: 1
-
-    ## PodDisruptionBudget settings
-    ## ref: https://kubernetes.io/docs/concepts/workloads/pods/disruptions/
-    ##
-    podDisruptionBudget:
-      enabled: false
-      maxUnavailable: 1
-
-    ## pushgateway resource requests and limits
-    ## Ref: http://kubernetes.io/docs/user-guide/compute-resources/
-    ##
-    resources: {}
-      # limits:
-      #   cpu: 10m
-      #   memory: 32Mi
-      # requests:
-      #   cpu: 10m
-      #   memory: 32Mi
-
-    ## Security context to be added to push-gateway pods
-    ##
-    securityContext:
-      runAsUser: 1001
-      runAsNonRoot: true
-
-    service:
-      annotations:
-        prometheus.io/probe: pushgateway
-      labels: {}
-      clusterIP: ""
-
-      ## List of IP addresses at which the pushgateway service is available
-      ## Ref: https://kubernetes.io/docs/user-guide/services/#external-ips
-      ##
-      externalIPs: []
-
-      loadBalancerIP: ""
-      loadBalancerSourceRanges: []
-      servicePort: 9091
-      type: ClusterIP
-
-    strategy:
-      type: Recreate
-      rollingUpdate: null
-
-
-    persistentVolume:
-      ## If true, pushgateway will create/use a Persistent Volume Claim
-      ## If false, use emptyDir
-      ##
-      enabled: true
-
-      ## pushgateway data Persistent Volume access modes
-      ## Must match those of existing PV or dynamic provisioner
-      ## Ref: http://kubernetes.io/docs/user-guide/persistent-volumes/
-      ##
-      accessModes:
-        - ReadWriteOnce
-
-      ## pushgateway data Persistent Volume Claim annotations
-      ##
-      annotations: {}
-
-      ## pushgateway data Persistent Volume existing claim name
-      ## Requires pushgateway.persistentVolume.enabled: true
-      ## If defined, PVC must be created manually before volume will be bound
-      existingClaim: ""
-
-      ## pushgateway data Persistent Volume mount root path
-      ##
-      mountPath: /data
-
-      ## pushgateway data Persistent Volume size
-      ##
-      size: 2Gi
-
-      ## pushgateway data Persistent Volume Storage Class
-      ## If defined, storageClassName: <storageClass>
-      ## If set to "-", storageClassName: "", which disables dynamic provisioning
-      ## If undefined (the default) or set to null, no storageClassName spec is
-      ##   set, choosing the default provisioner.  (gp2 on AWS, standard on
-      ##   GKE, AWS & OpenStack)
-      ##
-      # storageClass: "-"
-
-      ## pushgateway data Persistent Volume Binding Mode
-      ## If defined, volumeBindingMode: <volumeBindingMode>
-      ## If undefined (the default) or set to null, no volumeBindingMode spec is
-      ##   set, choosing the default mode.
-      ##
-      # volumeBindingMode: ""
-
-      ## Subdirectory of pushgateway data Persistent Volume to mount
-      ## Useful if the volume's root directory is not empty
-      ##
-      subPath: ""
-
   serverFiles:
     ## Alerts configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/alerting_rules/
     alerting_rules.yml: {}
-    # groups:
-    #   - name: Instances
-    #     rules:
-    #       - alert: InstanceDown
-    #         expr: up == 0
-    #         for: 5m
-    #         labels:
-    #           severity: page
-    #         annotations:
-    #           description: '{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes.'
-    #           summary: 'Instance {{ $labels.instance }} down'
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use alerting_rules.yml
-    alerts: {}
 
     ## Records configuration
     ## Ref: https://prometheus.io/docs/prometheus/latest/configuration/recording_rules/
     recording_rules.yml: {}
-    ## DEPRECATED DEFAULT VALUE, unless explicitly naming your files, please use recording_rules.yml
 
     prometheus.yml:
       rule_files:
         - /etc/config/recording_rules.yml
         - /etc/config/alerting_rules.yml
-      ## Below two files are DEPRECATED will be removed from this default values file
-        - /etc/config/rules
-        - /etc/config/alerts
 
       scrape_configs:
         - job_name: prometheus
           static_configs:
@@ -2098,9 +1181,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes-cadvisor'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2159,9 +1241,8 @@
         # and services to allow each to use different authentication configs.
         #
         # Kubernetes labels will be added as Prometheus labels on metrics via the
         # `labelmap` relabeling action.
-
         - job_name: 'kubernetes-nodes'
 
           # Default to scraping over https. If required, just disable this or change to
           # `http`.
@@ -2252,21 +1333,8 @@
           metric_relabel_configs:
             - source_labels: [__name__]
               regex: (container_cpu_allocation|container_cpu_usage_seconds_total|container_fs_limit_bytes|container_fs_writes_bytes_total|container_gpu_allocation|container_memory_allocation_bytes|container_memory_usage_bytes|container_memory_working_set_bytes|container_network_receive_bytes_total|container_network_transmit_bytes_total|DCGM_FI_DEV_GPU_UTIL|deployment_match_labels|kube_daemonset_status_desired_number_scheduled|kube_daemonset_status_number_ready|kube_deployment_spec_replicas|kube_deployment_status_replicas|kube_deployment_status_replicas_available|kube_job_status_failed|kube_namespace_annotations|kube_namespace_labels|kube_node_info|kube_node_labels|kube_node_status_allocatable|kube_node_status_allocatable_cpu_cores|kube_node_status_allocatable_memory_bytes|kube_node_status_capacity|kube_node_status_capacity_cpu_cores|kube_node_status_capacity_memory_bytes|kube_node_status_condition|kube_persistentvolume_capacity_bytes|kube_persistentvolume_status_phase|kube_persistentvolumeclaim_info|kube_persistentvolumeclaim_resource_requests_storage_bytes|kube_pod_container_info|kube_pod_container_resource_limits|kube_pod_container_resource_limits_cpu_cores|kube_pod_container_resource_limits_memory_bytes|kube_pod_container_resource_requests|kube_pod_container_resource_requests_cpu_cores|kube_pod_container_resource_requests_memory_bytes|kube_pod_container_status_restarts_total|kube_pod_container_status_running|kube_pod_container_status_terminated_reason|kube_pod_labels|kube_pod_owner|kube_pod_status_phase|kube_replicaset_owner|kube_statefulset_replicas|kube_statefulset_status_replicas|kubecost_cluster_info|kubecost_cluster_management_cost|kubecost_cluster_memory_working_set_bytes|kubecost_load_balancer_cost|kubecost_network_internet_egress_cost|kubecost_network_region_egress_cost|kubecost_network_zone_egress_cost|kubecost_node_is_spot|kubecost_pod_network_egress_bytes_total|node_cpu_hourly_cost|node_cpu_seconds_total|node_disk_reads_completed|node_disk_reads_completed_total|node_disk_writes_completed|node_disk_writes_completed_total|node_filesystem_device_error|node_gpu_count|node_gpu_hourly_cost|node_memory_Buffers_bytes|node_memory_Cached_bytes|node_memory_MemAvailable_bytes|node_memory_MemFree_bytes|node_memory_MemTotal_bytes|node_network_transmit_bytes_total|node_ram_hourly_cost|node_total_hourly_cost|pod_pvc_allocation|pv_hourly_cost|service_selector_labels|statefulSet_match_labels|kubecost_pv_info|up)
               action: keep
-
-
-  #  prometheus.yml: # Sample block -- enable if using an in cluster durable store.
-  #      remote_write:
-  #        - url: "http://pgprometheus-adapter:9201/write"
-  #          write_relabel_configs:
-  #            - source_labels: [__name__]
-  #              regex: 'container_.*_allocation|container_.*_allocation_bytes|.*_hourly_cost|kube_pod_container_resource_requests{resource="memory", unit="byte"}|container_memory_working_set_bytes|kube_pod_container_resource_requests{resource="cpu", unit="core"}|kube_pod_container_resource_requests|pod_pvc_allocation|kube_namespace_labels|kube_pod_labels'
-  #              action: keep
-  #          queue_config:
-  #            max_samples_per_send: 1000
-        # remote_read:
-        #  - url: "http://pgprometheus-adapter:9201/read"
     rules:
       groups:
         - name: CPU
           rules:
@@ -2307,13 +1375,10 @@
     #   regex: (.+)\d+
     #   target_label: dc
 
   networkPolicy:
-    ## Enable creation of NetworkPolicy resources.
-    ##
     enabled: false
 
-
 ## Optional daemonset to more accurately attribute network costs to the correct workload
 ## https://docs.kubecost.com/install-and-configure/advanced-configuration/network-costs-configuration
 networkCosts:
   enabled: false
@@ -2332,14 +1397,15 @@
   # Traffic Logging will enable logging the top 5 destinations for each source
   # every 30 minutes.
   trafficLogging: true
 
+  # Log level for the network cost containers. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # Port will set both the containerPort and hostPort to this value.
   # These must be identical due to network-costs being run on hostNetwork
   port: 3001
-  # this daemonset can use significant resources on large clusters: https://guide.kubecost.com/hc/en-us/articles/4407595973527-Network-Traffic-Cost-Allocation
+  # this daemonset can use significant resources on large clusters: https://docs.kubecost.com/using-kubecost/navigating-the-kubecost-ui/cost-allocation/network-allocation
   resources:
     limits:  # remove the limits by setting cpu: null
       cpu: 500m  # can be less, will depend on cluster size
       # memory: it is not recommended to set a memory limit
@@ -2410,75 +1476,41 @@
       #    ips:
       #      - "15.128.15.2"
       #      - "20.0.0.0/8"
 
-  ## Node tolerations for server scheduling to nodes with taints
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/assign-pod-node/
-  ##
   tolerations: []
-  #  - key: "key"
-  #    operator: "Equal|Exists"
-  #    value: "value"
-  #    effect: "NoSchedule|PreferNoSchedule|NoExecute(1.6 only)"
-
   affinity: {}
-
   service:
     annotations: {}
     labels: {}
-
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  ## PodMonitor
-  ## Allows scraping of network metrics from a dedicated prometheus operator setup
   podMonitor:
     enabled: false
     additionalLabels: {}
-  # match the default extraScrapeConfig
   additionalLabels: {}
   nodeSelector: {}
+  # Annotations to be added to network cost daemonset template and pod template annotations
   annotations: {}
   healthCheckProbes: {}
-    # readinessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
-    # livenessProbe:
-    #   tcpSocket:
-    #     port: 3001
-    #   initialDelaySeconds: 5
-    #   periodSeconds: 10
-    #   failureThreshold: 5
   additionalSecurityContext: {}
-    # readOnlyRootFilesystem: true
 
 ## Kubecost Deployment Configuration
 ## Used for HA mode in Business & Enterprise tier
 ##
 kubecostDeployment:
   replicas: 1
-  # deploymentStrategy:
-  #   rollingUpdate:
-  #     maxSurge: 1
-  #     maxUnavailable: 1
-  #   type: RollingUpdate
   labels: {}
   annotations: {}
 
-
 ## Kubecost Forecasting forecasts future cost patterns based on historical
 ## patterns observed by Kubecost.
 forecasting:
   enabled: true
 
   # fullImageName overrides the default image construction logic. The exact
   # image provided (registry, image, tag) will be used for the forecasting
   # container.
-  # Example: fullImageName: gcr.io/kubecost1/forecasting:v0.0.1
-  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+  fullImageName: gcr.io/kubecost1/kubecost-modeling:v0.1.18
   imagePullPolicy: IfNotPresent
 
   # Resource specification block for the forecasting container.
   resources:
@@ -2494,30 +1526,20 @@
     # -t is the worker timeout which primarily affects model training time;
     # if it is not high enough, training workers may die mid training
     "GUNICORN_CMD_ARGS": "--log-level info -t 1200"
 
-  # Define a priority class for the forecasting Deployment.
   priority:
     enabled: false
     name: ""
-
-  # Define a nodeSelector for the forecasting Deployment.
   nodeSelector: {}
-
-  # Define tolerations for the forecasting Deployment.
   tolerations: []
-
-  # Define Pod affinity for the forecasting Deployment.
+  annotations: {}
   affinity: {}
-
-  # Define a readiness probe for the forecasting container
   readinessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
     failureThreshold: 200
-
-  # Define a liveness probe for the forecasting container.
   livenessProbe:
     enabled: true
     initialDelaySeconds: 10
     periodSeconds: 10
@@ -2545,8 +1567,9 @@
   # Replicas sets the number of Aggregator replicas. It only has an effect if
   # `deployMethod: "statefulset"`
   replicas: 1
 
+  # Log level for the aggregator container. Options are "trace", "debug", "info", "warn", "error", "fatal", "panic"
   logLevel: info
 
   # stagingEmptyDirSizeLimit changes how large the "staging"
   # /var/configs/waterfowl emptyDir is. It only takes effect in StatefulSet
@@ -2673,8 +1696,11 @@
 
   ## Define tolerations for the aggregator pod
   # tolerations: []
 
+  ## Annotations to be added for aggregator deployment or statefulset
+  # annotations: {}
+
   ## Define Pod affinity for the aggregator pod
   # affinity: {}
 
   ## Define extra volumes for the aggregator pod
@@ -2737,9 +1763,8 @@
   jaeger:
     enabled: false
     image: jaegertracing/all-in-one
     imageVersion: latest
-    # containerSecurityContext:
 
   service:
     labels: {}
 
@@ -2785,8 +1810,10 @@
     securityContext: {}
     containerSecurityContext: {}
     nodeSelector: {}
     tolerations: []
+    ## Annotations to be added for diagnostics Deployment.
+    annotations: {}
     affinity: {}
 
 ## Provide a full name override for the diagnostics Deployment.
 # diagnosticsFullnameOverride: ""
@@ -2797,14 +1824,16 @@
   image:
     repository: gcr.io/kubecost1/cluster-controller
     tag: v0.16.9
   imagePullPolicy: IfNotPresent
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Set custom tolerations for the cluster controller.
   tolerations: []
+
+  ## Annotations to be added for cluster controller template
+  annotations: {}
   resources: {}
+  affinity: {}
+  nodeSelector: {}
   actionConfigs:
     # this configures the Kubecost Cluster Turndown action
     # for more details, see documentation at https://github.com/kubecost/cluster-turndown/tree/develop?tab=readme-ov-file#setting-a-turndown-schedule
     clusterTurndown: []
@@ -2950,12 +1979,12 @@
 # initChownDataImage ensures all Kubecost filepath permissions on PV or local storage are set up correctly.
 initChownDataImage: "busybox"  # Supports a fully qualified Docker image, e.g. registry.hub.docker.com/library/busybox:latest
 initChownData:
   resources: {}
-    # requests:
-    #   cpu: "50m"
-    #   memory: "20Mi"
 
+## Kubecost's Bundled Grafana
+## You can access it by visiting http://kubecost.me.com/grafana/
+## Ref: https://docs.kubecost.com/install-and-configure/advanced-configuration/custom-grafana
 grafana:
   # namespace_datasources: kubecost # override the default namespace here
   # namespace_dashboards: kubecost # override the default namespace here
   rbac:
@@ -2987,106 +2016,45 @@
   #           prometheusType: Prometheus
   #           prometheusVersion: 2.35.0
   #           timeInterval: 1m
 
-  ## Number of replicas for the Grafana deployment
   replicas: 1
-
-  ## Deployment strategy for the Grafana deployment
   deploymentStrategy: RollingUpdate
-
-  ## Readiness probe for the Grafana deployment
   readinessProbe:
     httpGet:
       path: /api/health
       port: 3000
-
-  ## Liveness probe for the Grafana deployment
   livenessProbe:
     httpGet:
       path: /api/health
       port: 3000
     initialDelaySeconds: 60
     timeoutSeconds: 30
     failureThreshold: 10
-
-  ## Container image settings for the Grafana deployment
   image:
     repository: grafana/grafana
     tag: 11.3.1
     pullPolicy: IfNotPresent
-
-    ## Optionally specify an array of imagePullSecrets.
-    ## Secrets must be manually created in the namespace.
     # pullSecrets:
-    #   - myRegistrKeySecretName
-
-  ## Pod-level security context for the Grafana deployment. Recommended let global defaults take effect.
   securityContext: {}
-    # runAsUser: 472
-    # fsGroup: 472
-
-  ## PriorityClassName for the Grafana deployment
   priorityClassName: ""
 
   ## Container image settings for Grafana initContainer used to download dashboards. Will only be used when dashboards are present.
   downloadDashboardsImage:
     repository: curlimages/curl
     tag: latest
     pullPolicy: IfNotPresent
-
-  ## Pod Annotations for the Grafana deployment
   podAnnotations: {}
-
-  ## Deployment annotations for the Grafana deployment
   annotations: {}
-
-  ## Expose the Grafana service to be accessed from outside the cluster (LoadBalancer service).
-  ## or access it from within the cluster (ClusterIP service). Set the service type and the port to serve it.
   service:
     type: ClusterIP
     port: 80
     annotations: {}
     labels: {}
-
-  ##  This template is not needed and is not supported.
-  ##  It is here for backwards compatibility.
-  ##  Kubecost exposes grafana by default with the
-  ##  top level ingress template under /grafana/
-  ingress:
-    enabled: false
-    annotations: {}
-      # kubernetes.io/ingress.class: nginx
-      # kubernetes.io/tls-acme: "true"
-    labels: {}
-    path: /
-    pathType: Prefix
-    hosts:
-      - chart-example.local
-    tls: []
-    #  - secretName: chart-example-tls
-    #    hosts:
-    #      - chart-example.local
-
-  ## Resource requests and limits for the Grafana deployment
   resources: {}
-  #  limits:
-  #    cpu: 100m
-  #    memory: 128Mi
-  #  requests:
-  #    cpu: 100m
-  #    memory: 128Mi
-
-  ## Node labels for pod assignment of the Grafana deployment
   nodeSelector: {}
-
-  ## Tolerations for pod assignment of the Grafana deployment
   tolerations: []
-
-  ## Affinity for pod assignment of the Grafana deployment
   affinity: {}
-
-  ## Enable persistence using Persistent Volume Claims of the Grafana deployment
   persistence:
     enabled: false
     # storageClassName: default
     # accessModes:
@@ -3094,123 +2062,24 @@
     # size: 10Gi
     # annotations: {}
     # subPath: ""
     # existingClaim:
-
-  ## Admin user for Grafana
   adminUser: admin
-
-  ## Admin password for Grafana
   adminPassword: strongpassword
-
-  ## Use an alternate scheduler for the Grafana deployment
   # schedulerName:
-
-  ## Extra environment variables that will be passed onto Grafana deployment pods
   env: {}
-
-  ## The name of a secret for Grafana in the same Kubernetes namespace which contain values to be added to the environment
-  ## This can be useful for auth tokens, etc
   envFromSecret: ""
-
-  ## Additional Grafana server secret mounts
-  ## Defines additional mounts with secrets. Secrets must be manually created in the namespace.
   extraSecretMounts: []
-    # - name: secret-files
-    #   mountPath: /etc/secrets
-    #   secretName: grafana-secret-files
-    #   readOnly: true
-
-  ## List of Grafana plugins
   plugins: []
-    # - digrich-bubblechart-panel
-    # - grafana-clock-panel
-
-  ## Grafana dashboard providers
-  ## ref: http://docs.grafana.org/administration/provisioning/#dashboards
-  ##
-  ## `path` must be /var/lib/grafana/dashboards/<provider_name>
-  ##
   dashboardProviders: {}
-  #  dashboardproviders.yaml:
-  #    apiVersion: 1
-  #    providers:
-  #    - name: 'default'
-  #      orgId: 1
-  #     folder: ''
-  #      type: file
-  #      disableDeletion: false
-  #      editable: true
-  #      options:
-  #        path: /var/lib/grafana/dashboards/default
-
-  ## Configure Grafana dashboard to import
-  ## NOTE: To use dashboards you must also enable/configure dashboardProviders
-  ## ref: https://grafana.com/dashboards
-  ##
-  ## dashboards per provider, use provider name as key.
-  ##
   dashboards: {}
-  #  default:
-  #    prometheus-stats:
-  #      gnetId: 3662
-  #      revision: 2
-  #      datasource: Prometheus
-
-  ## Reference to external Grafana ConfigMap per provider. Use provider name as key and ConfiMap name as value.
-  ## A provider dashboards must be defined either by external ConfigMaps or in values.yaml, not in both.
-  ## ConfigMap data example:
-  ##
-  ## data:
-  ##   example-dashboard.json: |
-  ##     RAW_JSON
-  ##
   dashboardsConfigMaps: {}
-  #  default: ""
-
-  ## LDAP Authentication for Grafana can be enabled with the following values on grafana.ini
-  ## NOTE: Grafana will fail to start if the value for ldap.toml is invalid
-    # auth.ldap:
-    #   enabled: true
-    #   allow_sign_up: true
-    #   config_file: /etc/grafana/ldap.toml
-
-  ## Grafana's LDAP configuration
-  ## Templated by the template in _helpers.tpl
-  ## NOTE: To enable the grafana.ini must be configured with auth.ldap.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#auth-ldap
-  ## ref: http://docs.grafana.org/installation/ldap/#configuration
-  ldap:
-    # `existingSecret` is a reference to an existing secret containing the ldap configuration
-    # for Grafana in a key `ldap-toml`.
-    existingSecret: ""
-    # `config` is the content of `ldap.toml` that will be stored in the created secret
-    config: ""
-    # config: |-
-    #   verbose_logging = true
-
-    #   [[servers]]
-    #   host = "my-ldap-server"
-    #   port = 636
-    #   use_ssl = true
-    #   start_tls = false
-    #   ssl_skip_verify = false
-    #   bind_dn = "uid=%s,ou=users,dc=myorg,dc=com"
-
-  ## Grafana's SMTP configuration
-  ## NOTE: To enable, grafana.ini must be configured with smtp.enabled
-  ## ref: http://docs.grafana.org/installation/configuration/#smtp
-  smtp:
-    # `existingSecret` is a reference to an existing secret containing the smtp configuration
-    # for Grafana in keys `user` and `password`.
-    existingSecret: ""
-
   ## Grafana sidecars that collect the configmaps with specified label and stores the included files them into the respective folders
   ## Requires at least Grafana 5 to work and can't be used together with parameters dashboardProviders, datasources and dashboards
   sidecar:
     image:
       repository: ghcr.io/kiwigrid/k8s-sidecar
-      tag: 1.28.0
+      tag: 1.28.1
       pullPolicy: IfNotPresent
     resources: {}
     dashboards:
       enabled: true
@@ -3226,9 +2095,8 @@
       enabled: false
       error_throttle_sleep: 0
       # label that the configmaps with datasources are marked with
       label: grafana_datasource
-
   ## Grafana's primary configuration
   ## NOTE: values in map will be converted to ini format
   ## ref: http://docs.grafana.org/installation/configuration/
   ##
@@ -3256,21 +2124,15 @@
 
 serviceAccount:
   create: true  # Set this to false if you're bringing your own service account.
   annotations: {}
-  # name: kc-test
 
 awsstore:
   useAwsStore: false
-  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest  # Name and version of the container image for AWSStore.
+  imageNameAndVersion: gcr.io/kubecost1/awsstore:latest
   createServiceAccount: false
-  ## PriorityClassName
-  ## Ref: https://kubernetes.io/docs/concepts/configuration/pod-priority-preemption/#priorityclass
   priorityClassName: ""
-  # Use a custom nodeSelector for AWSStore.
   nodeSelector: {}
-    # kubernetes.io/arch: amd64
-  ## Annotations for the AWSStore ServiceAccount.
   annotations: {}
 
 ## Federated ETL Architecture
 ## Ref: https://docs.kubecost.com/install-and-configure/install/multi-cluster/federated-etl
@@ -3331,9 +2193,9 @@
 #       address: http://cluster-a.kubecost.com:9090
 #       # Optional authentication credentials - only basic auth is currently supported.
 #       auth:
 #         type: basic
-#         # Secret name should be a secret formatted based on: https://github.com/kubecost/docs/blob/main/ingress-examples.md
+#         # Secret name should be a secret formatted based on: https://github.com/kubecost/poc-common-configurations/tree/main/ingress-examples
 #         secretName: cluster-a-auth
 #         # Or pass auth directly as base64 encoded user:pass
 #         data: YWRtaW46YWRtaW4=
 #         # Or user and pass directly
@@ -3369,10 +2231,10 @@
 #   gpuLabel: gpu
 #   gpuLabelValue: true
 #   alibabaServiceKeyName: ""
 #   alibabaServiceKeyPassword: ""
-#   awsServiceKeyName: ACCESSKEYID
-#   awsServiceKeyPassword:  fakepassword # Only use if your values.yaml are stored encrypted. Otherwise provide an existing secret via serviceKeySecretName
+#   awsServiceKeyName: ""
+#   awsServiceKeyPassword: ""
 #   awsSpotDataRegion: us-east-1
 #   awsSpotDataBucket: spot-data-feed-s3-bucket
 #   awsSpotDataPrefix: dev
 #   athenaProjectID: "530337586277" # The AWS AccountID where the Athena CUR is. Generally your masterpayer account
@@ -3551,4 +2413,8 @@
 #             host: kubecost.kubecost.svc.cluster.local
 #             port:
 #               number: 80
 
+# -- Optional override for the image used for the basic health test container
+# basicHealth:
+#   fullImageName: alpine/k8s:1.26.9
+

Copy link
Contributor

github-actions bot commented Jan 1, 2025

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2025-01-01 13:53:30.963710311 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2025-01-01 13:53:03.426368054 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 45f899ca0f060cb78b76717b768816a257756505a52b46a72a552cbed367f9ce
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJlbmFibGVkIjp0cnVlLCJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInBhdGhUeXBlIjoiSW1wbGVtZW50YXRpb25TcGVjaWZpYyIsInBhdGhzIjpbIi8iXSwidGxzIjpbeyJob3N0cyI6WyJrdWJlY29zdC0xMjctMC0wLTEubmlwLmlvIl0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtMTI3LTAtMC0xLm5pcC5pbyJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsRGFpbHlTdG9yZUR1cmF0aW9uRGF5cyI6OTEsImV0bEhvdXJseVN0b3JlRHVyYXRpb25Ib3VycyI6NDksImV0bFJlYWRPbmx5TW9kZSI6ZmFsc2UsImV4dHJhQXJncyI6W10sImV4dHJhUG9ydHMiOltdLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvY29zdC1tb2RlbCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJsb2dMZXZlbCI6ImluZm8iLCJtYXhRdWVyeUNvbmN1cnJlbmN5Ijo1LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIyMDBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXRjT2Zmc2V0IjoiKzAwOjAwIn0sImt1YmVjb3N0UHJvZHVjdENvbmZpZ3MiOnsiY2x1c3Rlck5hbWUiOiJzeC1jbnAtb3NzIERlbW8iLCJjbHVzdGVyUHJvZmlsZSI6ImRldmVsb3BtZW50IiwiY3VycmVuY3lDb2RlIjoiRVVSIiwiY3VzdG9tUHJpY2VzRW5hYmxlZCI6dHJ1ZSwiZGVmYXVsdE1vZGVsUHJpY2luZyI6eyJDUFUiOiIyOC4wIiwiR1BVIjoiNjkzLjUwIiwiUkFNIjoiMy4wOSIsImVuYWJsZWQiOnRydWUsImludGVybmV0TmV0d29ya0VncmVzcyI6IjAuMTIiLCJyZWdpb25OZXR3b3JrRWdyZXNzIjoiMC4wMSIsInNwb3RDUFUiOiI0Ljg2Iiwic3BvdEdQVSI6IjIyNS4wIiwic3BvdFJBTSI6IjAuNjUiLCJzdG9yYWdlIjoiMC4wNCIsInpvbmVOZXR3b3JrRWdyZXNzIjoiMC4wMSJ9fSwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhbm5vdGF0aW9ucyI6e30sImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLiBUaGUgbGFiZWwgbXVzdCBiZSBwcmVzZW50IG9uIHRoZSBLOHMgc2VydmljZSBlbmRwb2ludHMgYW5kIG5vdCBqdXN0IHBvZHMuXG4jIyBSZWZzOlxuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9ncHUtb3BlcmF0b3IvYmxvYi9kNDMxNmE0MTViYmQ2ODRjZTg0MTZhODgwNDIzMDVmYzFhMDkzYWE0L2Fzc2V0cy9zdGF0ZS1kY2dtLWV4cG9ydGVyLzA2MDBfc2VydmljZS55YW1sI0w3XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2RjZ20tZXhwb3J0ZXIvYmxvYi81NGZkMWNhMTM3YzY2NTExYTg3YTcyMDM5MDYxMzY4MGI5YmRhYmRkL2RlcGxveW1lbnQvdGVtcGxhdGVzL3NlcnZpY2UueWFtbCNMMjNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWRjZ20tZXhwb3J0ZXJcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogZW5kcG9pbnRzXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwLCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fY29tcG9uZW50LCBfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICg/aSkoLipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLip8LipkY2dtLWV4cG9ydGVyLiopXG4iLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhZmZpbml0eSI6e30sImFsZXJ0bWFuYWdlcnMiOltdLCJhbm5vdGF0aW9ucyI6e30sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiXSwic2NyYXBlX2NvbmZpZ3MiOlt7ImpvYl9uYW1lIjoicHJvbWV0aGV1cyIsInN0YXRpY19jb25maWdzIjpbeyJ0YXJnZXRzIjpbImxvY2FsaG9zdDo5MDkwIl19XX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2Rlcy1jYWR2aXNvciIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX2lub2Rlc19mcmVlfGNvbnRhaW5lcl9mc19pbm9kZXNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfc3BlY19jcHVfc2hhcmVzfGNvbnRhaW5lcl9zcGVjX21lbW9yeV9saW1pdF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNhZHZpc29yX3ZlcnNpb25faW5mb3xrdWJlY29zdF9wdl9pbmZvKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJjb250YWluZXIiXSwidGFyZ2V0X2xhYmVsIjoiY29udGFpbmVyX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbInBvZCJdLCJ0YXJnZXRfbGFiZWwiOiJwb2RfbmFtZSJ9XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzL2NhZHZpc29yIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGt1YmVsZXRfdm9sdW1lX3N0YXRzX3VzZWRfYnl0ZXMpIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcyIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtc2VydmljZS1lbmRwb2ludHMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJlbmRwb2ludHMifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6Iihjb250YWluZXJfY3B1X2FsbG9jYXRpb258Y29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9ncHVfYWxsb2NhdGlvbnxjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXN8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8RENHTV9GSV9ERVZfR1BVX1VUSUx8ZGVwbG95bWVudF9tYXRjaF9sYWJlbHN8a3ViZV9kYWVtb25zZXRfc3RhdHVzX2Rlc2lyZWRfbnVtYmVyX3NjaGVkdWxlZHxrdWJlX2RhZW1vbnNldF9zdGF0dXNfbnVtYmVyX3JlYWR5fGt1YmVfZGVwbG95bWVudF9zcGVjX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc19hdmFpbGFibGV8a3ViZV9qb2Jfc3RhdHVzX2ZhaWxlZHxrdWJlX25hbWVzcGFjZV9hbm5vdGF0aW9uc3xrdWJlX25hbWVzcGFjZV9sYWJlbHN8a3ViZV9ub2RlX2luZm98a3ViZV9ub2RlX2xhYmVsc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGVfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHl8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jb25kaXRpb258a3ViZV9wZXJzaXN0ZW50dm9sdW1lX2NhcGFjaXR5X2J5dGVzfGt1YmVfcGVyc2lzdGVudHZvbHVtZV9zdGF0dXNfcGhhc2V8a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1faW5mb3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9yZXNvdXJjZV9yZXF1ZXN0c19zdG9yYWdlX2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9pbmZvfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19jcHVfY29yZXN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Jlc3RhcnRzX3RvdGFsfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcnVubmluZ3xrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3Rlcm1pbmF0ZWRfcmVhc29ufGt1YmVfcG9kX2xhYmVsc3xrdWJlX3BvZF9vd25lcnxrdWJlX3BvZF9zdGF0dXNfcGhhc2V8a3ViZV9yZXBsaWNhc2V0X293bmVyfGt1YmVfc3RhdGVmdWxzZXRfcmVwbGljYXN8a3ViZV9zdGF0ZWZ1bHNldF9zdGF0dXNfcmVwbGljYXN8a3ViZWNvc3RfY2x1c3Rlcl9pbmZvfGt1YmVjb3N0X2NsdXN0ZXJfbWFuYWdlbWVudF9jb3N0fGt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGt1YmVjb3N0X2xvYWRfYmFsYW5jZXJfY29zdHxrdWJlY29zdF9uZXR3b3JrX2ludGVybmV0X2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfcmVnaW9uX2VncmVzc19jb3N0fGt1YmVjb3N0X25ldHdvcmtfem9uZV9lZ3Jlc3NfY29zdHxrdWJlY29zdF9ub2RlX2lzX3Nwb3R8a3ViZWNvc3RfcG9kX25ldHdvcmtfZWdyZXNzX2J5dGVzX3RvdGFsfG5vZGVfY3B1X2hvdXJseV9jb3N0fG5vZGVfY3B1X3NlY29uZHNfdG90YWx8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkX3RvdGFsfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkfG5vZGVfZGlza193cml0ZXNfY29tcGxldGVkX3RvdGFsfG5vZGVfZmlsZXN5c3RlbV9kZXZpY2VfZXJyb3J8bm9kZV9ncHVfY291bnR8bm9kZV9ncHVfaG91cmx5X2Nvc3R8bm9kZV9tZW1vcnlfQnVmZmVyc19ieXRlc3xub2RlX21lbW9yeV9DYWNoZWRfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtQXZhaWxhYmxlX2J5dGVzfG5vZGVfbWVtb3J5X01lbUZyZWVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtVG90YWxfYnl0ZXN8bm9kZV9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfG5vZGVfcmFtX2hvdXJseV9jb3N0fG5vZGVfdG90YWxfaG91cmx5X2Nvc3R8cG9kX3B2Y19hbGxvY2F0aW9ufHB2X2hvdXJseV9jb3N0fHNlcnZpY2Vfc2VsZWN0b3JfbGFiZWxzfHN0YXRlZnVsU2V0X21hdGNoX2xhYmVsc3xrdWJlY29zdF9wdl9pbmZvfHVwKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6dHJ1ZSwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY3JhcGUiXX0seyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoLipub2RlLWV4cG9ydGVyfGt1YmVjb3N0LW5ldHdvcmstY29zdHMpIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19lbmRwb2ludHNfbmFtZSJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihodHRwcz8pIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19zY2hlbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19zY2hlbWVfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcGF0aCJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoW146XSspKD86OlxcZCspPzsoXFxkKykiLCJyZXBsYWNlbWVudCI6IiQxOiQyIiwic291cmNlX2xhYmVscyI6WyJfX2FkZHJlc3NfXyIsIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BvcnQiXSwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2xhYmVsXyguKykifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25hbWVzcGFjZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWVzcGFjZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfcG9kX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25vZGUifV19XX0sInJlY29yZGluZ19ydWxlcy55bWwiOnt9LCJydWxlcyI6eyJncm91cHMiOlt7Im5hbWUiOiJDUFUiLCJydWxlcyI6W3siZXhwciI6InN1bShyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkpIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2U6cmF0ZTVtIn0seyJleHByIjoicmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pIiwicmVjb3JkIjoiY2x1c3RlcjpjcHVfdXNhZ2Vfbm9zdW06cmF0ZTVtIn0seyJleHByIjoiYXZnKGlyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiUE9EXCIsIGNvbnRhaW5lciE9XCJcIn1bNW1dKSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9jcHVfdXNhZ2VfaXJhdGUifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkgYnkgKGNvbnRhaW5lcixwb2QsbmFtZXNwYWNlKSIsInJlY29yZCI6Imt1YmVjb3N0X2NvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifSx7ImV4cHIiOiJzdW0oY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3tjb250YWluZXIhPVwiUE9EXCIsY29udGFpbmVyIT1cIlwifSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9XX0seyJuYW1lIjoiU2F2aW5ncyIsInJ1bGVzIjpbeyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX2NwdV9hbGxvY2F0aW9uKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19jcHVfYWxsb2NhdGlvbiJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcykgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMifV19XX19LCJzZXJ2aWNlQWNjb3VudHMiOnsiYWxlcnRtYW5hZ2VyIjp7ImNyZWF0ZSI6dHJ1ZX0sIm5vZGVFeHBvcnRlciI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9fX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2025-01-01 13:53:30.963710311 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2025-01-01 13:53:03.426368054 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2025-01-01 13:53:30.966710349 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2025-01-01 13:53:30.963710311 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2025-01-01 13:53:03.426368054 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2025-01-01 13:53:30.963710311 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2025-01-01 13:53:03.426368054 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2025-01-01 13:53:30.963710311 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2025-01-01 13:53:03.426368054 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2025-01-01 13:53:30.963710311 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2025-01-01 13:53:03.426368054 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2025-01-01 13:53:30.965710336 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2025-01-01 13:53:03.428368079 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2025-01-01 13:53:30.966710349 +0000
+++ out/pr/kubecost/values-k3d.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2025-01-01 13:53:03.429368092 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2025-01-01 13:53:03.699371530 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2025-01-01 13:53:03.699371530 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2025-01-01 13:53:03.699371530 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2025-01-01 13:53:03.699371530 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2025-01-01 13:53:31.239713724 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2025-01-01 13:53:03.697371504 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

github-actions bot commented Jan 1, 2025

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2025-01-01 13:53:03.700371542 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 85ffb7d70df73fa23802794bd8b0aadf0599d15396986db4b51fbd4f7b14015c
+        checksum/configs: 45f899ca0f060cb78b76717b768816a257756505a52b46a72a552cbed367f9ce
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInByb21ldGhldXMiOnsiZW5hYmxlZCI6dHJ1ZSwiZnFkbiI6Imh0dHA6Ly9zeC1rdWJlLXByb21ldGhldXMtc3RhY2stcHJvbWV0aGV1cy5tb25pdG9yaW5nOjkwOTAvIn0sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LW1hbmFnZXIuaW8vY2x1c3Rlci1pc3N1ZXIiOiJsZXRzZW5jcnlwdC1zdGFnaW5nIn0sImNsYXNzTmFtZSI6Im5naW54IiwiZW5hYmxlZCI6dHJ1ZSwiaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QtbWV0YWxzdGFjay5wbGF0Zm9ybS1lbmdpbmVlci5jbG91ZCJdLCJzZWNyZXROYW1lIjoia3ViZWNvc3Qtc2VydmVyLXRscyJ9XX0sImluaXRDaG93bkRhdGEiOnsicmVzb3VyY2VzIjp7fX0sImluaXRDaG93bkRhdGFJbWFnZSI6ImJ1c3lib3giLCJrdWJlY29zdERlcGxveW1lbnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJyZXBsaWNhcyI6MX0sImt1YmVjb3N0RnJvbnRlbmQiOnsiZGVwbG95TWV0aG9kIjoic2luZ2xlcG9kIiwiZGVwbG95bWVudFN0cmF0ZWd5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiaGFSZXBsaWNhcyI6MiwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Zyb250ZW5kIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwiaXB2NiI6eyJlbmFibGVkIjp0cnVlfSwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlc291cmNlcyI6eyJyZXF1ZXN0cyI6eyJjcHUiOiIxMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1c2VEZWZhdWx0RnFkbiI6ZmFsc2V9LCJrdWJlY29zdE1ldHJpY3MiOnt9LCJrdWJlY29zdE1vZGVsIjp7ImNvbnRhaW5lclN0YXRzRW5hYmxlZCI6dHJ1ZSwiZXRsIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsRmlsZVN0b3JlRW5hYmxlZCI6dHJ1ZSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAiLCJ3YXJtQ2FjaGUiOmZhbHNlfSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJQVkVuYWJsZWQiOmZhbHNlLCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImJhc2VVUkwiOiIiLCJjb25maWdNYXBPdmVycmlkZU5hbWUiOiIiLCJjb25maWdQYXRoIjoiL2V0Yy9jb25maWcvcHJvbWV0aGV1cy55bWwiLCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnt9LCJkZXBsb3ltZW50QW5ub3RhdGlvbnMiOnt9LCJlbXB0eURpciI6eyJzaXplTGltaXQiOiIifSwiZW5hYmxlZCI6dHJ1ZSwiZW52IjpbXSwiZXh0cmFBcmdzIjp7InF1ZXJ5Lm1heC1jb25jdXJyZW5jeSI6MSwicXVlcnkubWF4LXNhbXBsZXMiOjEwMDAwMDAwMH0sImV4dHJhQ29uZmlnbWFwTW91bnRzIjpbXSwiZXh0cmFGbGFncyI6WyJ3ZWIuZW5hYmxlLWxpZmVjeWNsZSJdLCJleHRyYUhvc3RQYXRoTW91bnRzIjpbXSwiZXh0cmFJbml0Q29udGFpbmVycyI6W10sImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZXh0cmFWb2x1bWVNb3VudHMiOltdLCJleHRyYVZvbHVtZXMiOltdLCJnbG9iYWwiOnsiZXZhbHVhdGlvbl9pbnRlcnZhbCI6IjFtIiwiZXh0ZXJuYWxfbGFiZWxzIjp7ImNsdXN0ZXJfaWQiOiJzeC1jbnAtb3NzIn0sInNjcmFwZV9pbnRlcnZhbCI6IjFtIiwic2NyYXBlX3RpbWVvdXQiOiI2MHMifSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJxdWF5LmlvL3Byb21ldGhldXMvcHJvbWV0aGV1cyIsInRhZyI6InYyLjU1LjEifSwibGl2ZW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsImxpdmVuZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsImxpdmVuZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJsaXZlbmVzc1Byb2JlVGltZW91dCI6MywibmFtZSI6InNlcnZlciIsIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYWNjZXNzTW9kZXMiOlsiUmVhZFdyaXRlT25jZSJdLCJhbm5vdGF0aW9ucyI6e30sImVuYWJsZWQiOnRydWUsImV4aXN0aW5nQ2xhaW0iOiIiLCJtb3VudFBhdGgiOiIvZGF0YSIsInNpemUiOiIzMkdpIiwic3ViUGF0aCI6IiJ9LCJwb2RBbm5vdGF0aW9ucyI6e30sInBvZExhYmVscyI6e30sInByZWZpeFVSTCI6IiIsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmVhZGluZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJyZWFkaW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwicmVhZGluZXNzUHJvYmVTdWNjZXNzVGhyZXNob2xkIjoxLCJyZWFkaW5lc3NQcm9iZVRpbWVvdXQiOjMsInJlbW90ZVJlYWQiOnt9LCJyZW1vdGVXcml0ZSI6e30sInJlcGxpY2FDb3VudCI6MSwicmVzb3VyY2VzIjp7fSwicmV0ZW50aW9uIjoiOTdoIiwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImNsdXN0ZXJJUCI6IiIsImV4dGVybmFsSVBzIjpbXSwibGFiZWxzIjp7fSwibG9hZEJhbGFuY2VySVAiOiIiLCJsb2FkQmFsYW5jZXJTb3VyY2VSYW5nZXMiOltdLCJzZXJ2aWNlUG9ydCI6ODAsInNlc3Npb25BZmZpbml0eSI6Ik5vbmUiLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInN0cmF0ZWd5Ijp7InR5cGUiOiJSZWNyZWF0ZSJ9LCJ0ZXJtaW5hdGlvbkdyYWNlUGVyaW9kU2Vjb25kcyI6MzAwLCJ0b2xlcmF0aW9ucyI6W119LCJzZXJ2ZXJGaWxlcyI6eyJhbGVydGluZ19ydWxlcy55bWwiOnt9LCJhbGVydHMiOnt9LCJwcm9tZXRoZXVzLnltbCI6eyJydWxlX2ZpbGVzIjpbIi9ldGMvY29uZmlnL3JlY29yZGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9hbGVydGluZ19ydWxlcy55bWwiLCIvZXRjL2NvbmZpZy9ydWxlcyIsIi9ldGMvY29uZmlnL2FsZXJ0cyJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInB1c2hnYXRld2F5Ijp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicmVwb3J0aW5nIjp7ImVycm9yUmVwb3J0aW5nIjp0cnVlLCJsb2dDb2xsZWN0aW9uIjp0cnVlLCJwcm9kdWN0QW5hbHl0aWNzIjp0cnVlLCJ2YWx1ZXNSZXBvcnRpbmciOnRydWV9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwibm9kZVBvcnQiOnt9LCJwb3J0Ijo5MDkwLCJ0YXJnZXRQb3J0Ijo5MDkwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwcm9tZXRoZXVzIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLXByb21ldGhldXMubW9uaXRvcmluZzo5MDkwLyIsImluc2VjdXJlU2tpcFZlcmlmeSI6ZmFsc2UsImt1YmVSQkFDUHJveHkiOmZhbHNlfSwic2VjdXJpdHlDb250ZXh0Ijp7ImZzR3JvdXAiOjEwMDEsImZzR3JvdXBDaGFuZ2VQb2xpY3kiOiJPblJvb3RNaXNtYXRjaCIsInJ1bkFzR3JvdXAiOjEwMDEsInJ1bkFzTm9uUm9vdCI6dHJ1ZSwicnVuQXNVc2VyIjoxMDAxLCJzZWNjb21wUHJvZmlsZSI6eyJ0eXBlIjoiUnVudGltZURlZmF1bHQifX19LCJncmFmYW5hIjp7ImFkbWluUGFzc3dvcmQiOiJzdHJvbmdwYXNzd29yZCIsImFkbWluVXNlciI6ImFkbWluIiwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImRhc2hib2FyZFByb3ZpZGVycyI6e30sImRhc2hib2FyZHMiOnt9LCJkYXNoYm9hcmRzQ29uZmlnTWFwcyI6e30sImRlcGxveW1lbnRTdHJhdGVneSI6IlJvbGxpbmdVcGRhdGUiLCJkb3dubG9hZERhc2hib2FyZHNJbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImN1cmxpbWFnZXMvY3VybCIsInRhZyI6ImxhdGVzdCJ9LCJlbnYiOnt9LCJlbnZGcm9tU2VjcmV0IjoiIiwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJncmFmYW5hLmluaSI6eyJhbmFseXRpY3MiOnsiY2hlY2tfZm9yX3VwZGF0ZXMiOnRydWV9LCJhdXRoLmFub255bW91cyI6eyJlbmFibGVkIjp0cnVlLCJvcmdfbmFtZSI6Ik1haW4gT3JnLiIsIm9yZ19yb2xlIjoiRWRpdG9yIn0sImdyYWZhbmFfbmV0Ijp7InVybCI6Imh0dHBzOi8vZ3JhZmFuYS5uZXQifSwibG9nIjp7Im1vZGUiOiJjb25zb2xlIn0sInBhdGhzIjp7ImRhdGEiOiIvdmFyL2xpYi9ncmFmYW5hL2RhdGEiLCJsb2dzIjoiL3Zhci9sb2cvZ3JhZmFuYSIsInBsdWdpbnMiOiIvdmFyL2xpYi9ncmFmYW5hL3BsdWdpbnMiLCJwcm92aXNpb25pbmciOiIvZXRjL2dyYWZhbmEvcHJvdmlzaW9uaW5nIn0sInNlcnZlciI6eyJyb290X3VybCI6IiUocHJvdG9jb2wpczovLyUoZG9tYWluKXM6JShodHRwX3BvcnQpcy9ncmFmYW5hIiwic2VydmVfZnJvbV9zdWJfcGF0aCI6ZmFsc2V9fSwiaW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJncmFmYW5hL2dyYWZhbmEiLCJ0YWciOiIxMS4zLjEifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5hbWVzcGFjZV9kYXNoYm9hcmRzIjoia3ViZWNvc3QiLCJuYW1lc3BhY2VfZGF0YXNvdXJjZXMiOiJrdWJlY29zdCIsIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjEifSwicmVzb3VyY2VzIjp7fX0sInRvbGVyYXRpb25zIjpbXX0sImluZ3Jlc3MiOnsiYW5ub3RhdGlvbnMiOnsiY2VydC1tYW5hZ2VyLmlvL2NsdXN0ZXItaXNzdWVyIjoibGV0c2VuY3J5cHQtc3RhZ2luZyJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwicGF0aFR5cGUiOiJJbXBsZW1lbnRhdGlvblNwZWNpZmljIiwicGF0aHMiOlsiLyJdLCJ0bHMiOlt7Imhvc3RzIjpbImt1YmVjb3N0LW1ldGFsc3RhY2sucGxhdGZvcm0tZW5naW5lZXIuY2xvdWQiXSwic2VjcmV0TmFtZSI6Imt1YmVjb3N0LXNlcnZlci10bHMifV19LCJpbml0Q2hvd25EYXRhIjp7InJlc291cmNlcyI6e319LCJpbml0Q2hvd25EYXRhSW1hZ2UiOiJidXN5Ym94Iiwia3ViZWNvc3REZXBsb3ltZW50Ijp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fSwicmVwbGljYXMiOjF9LCJrdWJlY29zdEZyb250ZW5kIjp7ImRlcGxveU1ldGhvZCI6InNpbmdsZXBvZCIsImRlcGxveW1lbnRTdHJhdGVneSI6e30sImVuYWJsZWQiOnRydWUsImhhUmVwbGljYXMiOjIsImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9mcm9udGVuZCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImlwdjYiOnsiZW5hYmxlZCI6dHJ1ZX0sImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6NiwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MSwicGVyaW9kU2Vjb25kcyI6NX0sInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMTBtIiwibWVtb3J5IjoiNTVNaSJ9fSwidXNlRGVmYXVsdEZxZG4iOmZhbHNlfSwia3ViZWNvc3RNb2RlbCI6eyJjb250YWluZXJTdGF0c0VuYWJsZWQiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibG9nTGV2ZWwiOiJpbmZvIiwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCJ9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlNpemUiOiI1R2kiLCJlbmFibGVkIjp0cnVlLCJsYWJlbHMiOnt9LCJzaXplIjoiNUdpIn0sInByb21ldGhldXMiOnsiYWxlcnRtYW5hZ2VyRmlsZXMiOnsiYWxlcnRtYW5hZ2VyLnltbCI6eyJnbG9iYWwiOnt9LCJyZWNlaXZlcnMiOlt7Im5hbWUiOiJkZWZhdWx0LXJlY2VpdmVyIn1dLCJyb3V0ZSI6eyJncm91cF9pbnRlcnZhbCI6IjVtIiwiZ3JvdXBfd2FpdCI6IjEwcyIsInJlY2VpdmVyIjoiZGVmYXVsdC1yZWNlaXZlciIsInJlcGVhdF9pbnRlcnZhbCI6IjNoIn19fSwiY29uZmlnbWFwUmVsb2FkIjp7fSwiZXh0cmFTY3JhcGVDb25maWdzIjoiLSBqb2JfbmFtZToga3ViZWNvc3RcbiAgaG9ub3JfbGFiZWxzOiB0cnVlXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiY29zdC1hbmFseXplci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICBwb3J0OiA5MDAzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1uZXR3b3JraW5nXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IHBvZFxuICByZWxhYmVsX2NvbmZpZ3M6XG4gICMgU2NyYXBlIG9ubHkgdGhlIHRoZSB0YXJnZXRzIG1hdGNoaW5nIHRoZSBmb2xsb3dpbmcgbWV0YWRhdGFcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9faW5zdGFuY2VdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAga3ViZWNvc3RcbiAgICAtIHNvdXJjZV9sYWJlbHM6IFtfX21ldGFfa3ViZXJuZXRlc19wb2RfbGFiZWxfYXBwX2t1YmVybmV0ZXNfaW9fbmFtZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBuZXR3b3JrLWNvc3RzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1hZ2dyZWdhdG9yXG4gIHNjcmFwZV9pbnRlcnZhbDogMW1cbiAgc2NyYXBlX3RpbWVvdXQ6IDYwc1xuICBtZXRyaWNzX3BhdGg6IC9tZXRyaWNzXG4gIHNjaGVtZTogaHR0cFxuICBkbnNfc2RfY29uZmlnczpcbiAgLSBuYW1lczpcbiAgICAtIHt7IHRlbXBsYXRlIFwiYWdncmVnYXRvci5zZXJ2aWNlTmFtZVwiIC4gfX1cbiAgICB0eXBlOiAnQSdcbiAgICB7ey0gaWYgb3IgLlZhbHVlcy5zYW1sLmVuYWJsZWQgLlZhbHVlcy5vaWRjLmVuYWJsZWQgfX1cbiAgICBwb3J0OiA5MDA4XG4gICAge3stIGVsc2UgfX1cbiAgICBwb3J0OiA5MDA0XG4gICAge3stIGVuZCB9fVxuIyMgRW5hYmxlcyBzY3JhcGluZyBvZiBOVklESUEgR1BVIG1ldHJpY3MgdmlhIGRjZ20tZXhwb3J0ZXIuIFNjcmFwZXMgYWxsXG4jIyBlbmRwb2ludHMgd2hpY2ggY29udGFpbiBcImRjZ20tZXhwb3J0ZXJcIiBpbiBsYWJlbHMgXCJhcHBcIixcbiMjIFwiYXBwLmt1YmVybmV0ZXMuaW8vY29tcG9uZW50XCIsIG9yIFwiYXBwLmt1YmVybmV0ZXMuaW8vbmFtZVwiIHdpdGggYSBjYXNlXG4jIyBpbnNlbnNpdGl2ZSBtYXRjaC4gVGhlIGxhYmVsIG11c3QgYmUgcHJlc2VudCBvbiB0aGUgSzhzIHNlcnZpY2UgZW5kcG9pbnRzIGFuZCBub3QganVzdCBwb2RzLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYW5ub3RhdGlvbnMiOnt9LCJiYXNlVVJMIjoiIiwiY29uZmlnTWFwT3ZlcnJpZGVOYW1lIjoiIiwiY29uZmlnUGF0aCI6Ii9ldGMvY29uZmlnL3Byb21ldGhldXMueW1sIiwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7fSwiZW1wdHlEaXIiOnsic2l6ZUxpbWl0IjoiIn0sImVuYWJsZWQiOnRydWUsImVudiI6W10sImV4dHJhQXJncyI6eyJxdWVyeS5tYXgtY29uY3VycmVuY3kiOjEsInF1ZXJ5Lm1heC1zYW1wbGVzIjoxMDAwMDAwMDB9LCJleHRyYUNvbmZpZ21hcE1vdW50cyI6W10sImV4dHJhRmxhZ3MiOlsid2ViLmVuYWJsZS1saWZlY3ljbGUiXSwiZXh0cmFIb3N0UGF0aE1vdW50cyI6W10sImV4dHJhSW5pdENvbnRhaW5lcnMiOltdLCJleHRyYVNlY3JldE1vdW50cyI6W10sImV4dHJhVm9sdW1lTW91bnRzIjpbXSwiZXh0cmFWb2x1bWVzIjpbXSwiZ2xvYmFsIjp7ImV2YWx1YXRpb25faW50ZXJ2YWwiOiIxbSIsImV4dGVybmFsX2xhYmVscyI6eyJjbHVzdGVyX2lkIjoic3gtY25wLW9zcyJ9LCJzY3JhcGVfaW50ZXJ2YWwiOiIxbSIsInNjcmFwZV90aW1lb3V0IjoiNjBzIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoicXVheS5pby9wcm9tZXRoZXVzL3Byb21ldGhldXMiLCJ0YWciOiJ2Mi41NS4xIn0sImxpdmVuZXNzUHJvYmVGYWlsdXJlVGhyZXNob2xkIjozLCJsaXZlbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJsaXZlbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwibGl2ZW5lc3NQcm9iZVRpbWVvdXQiOjMsIm5hbWUiOiJzZXJ2ZXIiLCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFjY2Vzc01vZGVzIjpbIlJlYWRXcml0ZU9uY2UiXSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJleGlzdGluZ0NsYWltIjoiIiwibW91bnRQYXRoIjoiL2RhdGEiLCJzaXplIjoiMzJHaSIsInN1YlBhdGgiOiIifSwicG9kQW5ub3RhdGlvbnMiOnt9LCJwb2RMYWJlbHMiOnt9LCJwcmVmaXhVUkwiOiIiLCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInJlYWRpbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywicmVhZGluZXNzUHJvYmVJbml0aWFsRGVsYXkiOjUsInJlYWRpbmVzc1Byb2JlU3VjY2Vzc1RocmVzaG9sZCI6MSwicmVhZGluZXNzUHJvYmVUaW1lb3V0IjozLCJyZW1vdGVSZWFkIjp7fSwicmVtb3RlV3JpdGUiOnt9LCJyZXBsaWNhQ291bnQiOjEsInJlc291cmNlcyI6e30sInJldGVudGlvbiI6Ijk3aCIsInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJjbHVzdGVySVAiOiIiLCJleHRlcm5hbElQcyI6W10sImxhYmVscyI6e30sImxvYWRCYWxhbmNlcklQIjoiIiwibG9hZEJhbGFuY2VyU291cmNlUmFuZ2VzIjpbXSwic2VydmljZVBvcnQiOjgwLCJzZXNzaW9uQWZmaW5pdHkiOiJOb25lIiwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzdHJhdGVneSI6eyJ0eXBlIjoiUmVjcmVhdGUifSwidGVybWluYXRpb25HcmFjZVBlcmlvZFNlY29uZHMiOjMwMCwidG9sZXJhdGlvbnMiOltdfSwic2VydmVyRmlsZXMiOnsiYWxlcnRpbmdfcnVsZXMueW1sIjp7fSwicHJvbWV0aGV1cy55bWwiOnsicnVsZV9maWxlcyI6WyIvZXRjL2NvbmZpZy9yZWNvcmRpbmdfcnVsZXMueW1sIiwiL2V0Yy9jb25maWcvYWxlcnRpbmdfcnVsZXMueW1sIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzaWdWNFByb3h5Ijp7Imhvc3QiOiJhcHMtd29ya3NwYWNlcy51cy13ZXN0LTIuYW1hem9uYXdzLmNvbSIsImltYWdlIjoicHVibGljLmVjci5hd3MvYXdzLW9ic2VydmFiaWxpdHkvYXdzLXNpZ3Y0LXByb3h5OmxhdGVzdCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsIm5hbWUiOiJhcHMiLCJwb3J0Ijo4MDA1LCJyZWdpb24iOiJ1cy13ZXN0LTIiLCJyZXNvdXJjZXMiOnt9fSwic3VwcG9ydE5GUyI6ZmFsc2UsInRvbGVyYXRpb25zIjpbXSwidG9wb2xvZ3lTcHJlYWRDb25zdHJhaW50cyI6W10sInVwZ3JhZGUiOnsidG9WMiI6ZmFsc2V9fQ==
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -183,9 +166,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -233,9 +216,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -287,9 +270,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2025-01-01 13:53:31.240713736 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2025-01-01 13:53:03.697371504 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2025-01-01 13:53:03.700371542 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2025-01-01 13:53:31.240713736 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2025-01-01 13:53:03.697371504 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2025-01-01 13:53:31.241713749 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2025-01-01 13:53:03.699371530 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2025-01-01 13:53:31.239713724 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2025-01-01 13:53:03.697371504 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2025-01-01 13:53:03.700371542 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2025-01-01 13:53:31.240713736 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2025-01-01 13:53:03.697371504 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2025-01-01 13:53:31.240713736 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2025-01-01 13:53:03.697371504 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2025-01-01 13:53:03.700371542 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2025-01-01 13:53:03.700371542 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
Only in out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrole.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-clusterrolebinding.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-configmap.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-deployment.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-pvc.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-service.yaml
Only in out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates: prometheus-server-serviceaccount.yaml
diff -U 4 -r out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2025-01-01 13:53:31.242713761 +0000
+++ out/pr/kubecost/values-metalstack.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2025-01-01 13:53:03.700371542 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-cloud-cost-service.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,17 +5,15 @@
 metadata:
   name: release-name-cloud-cost
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/aggregator-service.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,15 +5,13 @@
 metadata:
   name: release-name-aggregator
   namespace: default
   labels:
-
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: aggregator
 spec:
   selector:
-
     app.kubernetes.io/name: cost-analyzer
     app.kubernetes.io/instance: release-name
     app: cost-analyzer
   type: "ClusterIP"
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-binding-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRoleBinding
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
@@ -26,11 +25,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 roleRef:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-cluster-role-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -4,11 +4,10 @@
 kind: ClusterRole
 metadata:
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
@@ -90,11 +89,10 @@
 metadata:
   namespace: default
   name: release-name-cost-analyzer
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 rules:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-config-map-template.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:

Copy link
Contributor

github-actions bot commented Jan 1, 2025

Changes Rendered Chart
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-deployment-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -6,12 +6,13 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -29,9 +30,9 @@
         app.kubernetes.io/name: cost-analyzer
         app.kubernetes.io/instance: release-name
         app: cost-analyzer
       annotations:
-        checksum/configs: 3200005267ed0d35ec8656b0c4da50d94bf7156275304458eccd802ce21d54ee
+        checksum/configs: 464ddc3eced704ef4072987b48e0134bc01babb9294f4d818dec7f9eed8943a9
     spec:
       securityContext:
         fsGroup: 1001
         fsGroupChangePolicy: OnRootMismatch
@@ -55,9 +56,9 @@
           persistentVolumeClaim:
             claimName: release-name-cost-analyzer
       initContainers:
       containers:
-        - image: gcr.io/kubecost1/cost-model:prod-2.4.3
+        - image: "gcr.io/kubecost1/cost-model:prod-2.5.1"
           name: cost-model
           securityContext:
             allowPrivilegeEscalation: false
             capabilities:
@@ -94,12 +95,16 @@
           volumeMounts:
             - name: persistent-configs
               mountPath: /var/configs
           env:
+            - name: CONTAINER_IMAGE_TAG
+              value: prod-2.5.1
             - name: GRAFANA_ENABLED
               value: "false"
+            - name: LOG_LEVEL
+              value: info
             - name: HELM_VALUES
-              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiZW5hYmxlZCI6dHJ1ZSwiZW52Ijp7IkdVTklDT1JOX0NNRF9BUkdTIjoiLS1sb2ctbGV2ZWwgaW5mbyAtdCAxMjAwIn0sImZ1bGxJbWFnZU5hbWUiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW1vZGVsaW5nOnYwLjEuMTYiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibm9kZVNlbGVjdG9yIjp7fSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsibGltaXRzIjp7ImNwdSI6IjE1MDBtIiwibWVtb3J5IjoiMUdpIn0sInJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiIzMDBNaSJ9fSwidG9sZXJhdGlvbnMiOltdfSwiZ2xvYmFsIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJjb250YWluZXJTZWN1cml0eUNvbnRleHQiOnsiYWxsb3dQcml2aWxlZ2VFc2NhbGF0aW9uIjpmYWxzZSwiY2FwYWJpbGl0aWVzIjp7ImRyb3AiOlsiQUxMIl19LCJwcml2aWxlZ2VkIjpmYWxzZSwicmVhZE9ubHlSb290RmlsZXN5c3RlbSI6dHJ1ZX0sImludGVncmF0aW9ucyI6e30sIm5vdGlmaWNhdGlvbnMiOnsiYWxlcnRtYW5hZ2VyIjp7ImVuYWJsZWQiOnRydWUsImZxZG4iOiJodHRwOi8vc3gta3ViZS1wcm9tZXRoZXVzLXN0YWNrLWFsZXJ0bWFuYWdlci5tb25pdG9yaW5nOjkwOTMvIn19LCJwbGF0Zm9ybXMiOnsiY2ljZCI6eyJlbmFibGVkIjp0cnVlLCJza2lwU2FuaXR5Q2hlY2tzIjpmYWxzZX19LCJwb2RBbm5vdGF0aW9ucyI6e30sInNlY3VyaXR5Q29udGV4dCI6eyJmc0dyb3VwIjoxMDAxLCJmc0dyb3VwQ2hhbmdlUG9saWN5IjoiT25Sb290TWlzbWF0Y2giLCJydW5Bc0dyb3VwIjoxMDAxLCJydW5Bc05vblJvb3QiOnRydWUsInJ1bkFzVXNlciI6MTAwMSwic2VjY29tcFByb2ZpbGUiOnsidHlwZSI6IlJ1bnRpbWVEZWZhdWx0In19fSwiZ3JhZmFuYSI6eyJhZG1pblBhc3N3b3JkIjoic3Ryb25ncGFzc3dvcmQiLCJhZG1pblVzZXIiOiJhZG1pbiIsImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJkYXNoYm9hcmRQcm92aWRlcnMiOnt9LCJkYXNoYm9hcmRzIjp7fSwiZGFzaGJvYXJkc0NvbmZpZ01hcHMiOnt9LCJkZXBsb3ltZW50U3RyYXRlZ3kiOiJSb2xsaW5nVXBkYXRlIiwiZG93bmxvYWREYXNoYm9hcmRzSW1hZ2UiOnsicHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsInJlcG9zaXRvcnkiOiJjdXJsaW1hZ2VzL2N1cmwiLCJ0YWciOiJsYXRlc3QifSwiZW52Ijp7fSwiZW52RnJvbVNlY3JldCI6IiIsImV4dHJhU2VjcmV0TW91bnRzIjpbXSwiZ3JhZmFuYS5pbmkiOnsiYW5hbHl0aWNzIjp7ImNoZWNrX2Zvcl91cGRhdGVzIjp0cnVlfSwiYXV0aC5hbm9ueW1vdXMiOnsiZW5hYmxlZCI6dHJ1ZSwib3JnX25hbWUiOiJNYWluIE9yZy4iLCJvcmdfcm9sZSI6IkVkaXRvciJ9LCJncmFmYW5hX25ldCI6eyJ1cmwiOiJodHRwczovL2dyYWZhbmEubmV0In0sImxvZyI6eyJtb2RlIjoiY29uc29sZSJ9LCJwYXRocyI6eyJkYXRhIjoiL3Zhci9saWIvZ3JhZmFuYS9kYXRhIiwibG9ncyI6Ii92YXIvbG9nL2dyYWZhbmEiLCJwbHVnaW5zIjoiL3Zhci9saWIvZ3JhZmFuYS9wbHVnaW5zIiwicHJvdmlzaW9uaW5nIjoiL2V0Yy9ncmFmYW5hL3Byb3Zpc2lvbmluZyJ9LCJzZXJ2ZXIiOnsicm9vdF91cmwiOiIlKHByb3RvY29sKXM6Ly8lKGRvbWFpbilzOiUoaHR0cF9wb3J0KXMvZ3JhZmFuYSIsInNlcnZlX2Zyb21fc3ViX3BhdGgiOmZhbHNlfX0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ3JhZmFuYS9ncmFmYW5hIiwidGFnIjoiMTEuMy4xIn0sImxkYXAiOnsiY29uZmlnIjoiIiwiZXhpc3RpbmdTZWNyZXQiOiIifSwibGl2ZW5lc3NQcm9iZSI6eyJmYWlsdXJlVGhyZXNob2xkIjoxMCwiaHR0cEdldCI6eyJwYXRoIjoiL2FwaS9oZWFsdGgiLCJwb3J0IjozMDAwfSwiaW5pdGlhbERlbGF5U2Vjb25kcyI6NjAsInRpbWVvdXRTZWNvbmRzIjozMH0sIm5vZGVTZWxlY3RvciI6e30sInBsdWdpbnMiOltdLCJwb2RBbm5vdGF0aW9ucyI6e30sInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJyZWFkaW5lc3NQcm9iZSI6eyJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9fSwicmVwbGljYXMiOjEsInJlc291cmNlcyI6e30sInNlY3VyaXR5Q29udGV4dCI6e30sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJwb3J0Ijo4MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJjcmVhdGUiOnRydWUsIm5hbWUiOiIifSwic2lkZWNhciI6eyJkYXNoYm9hcmRzIjp7ImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXJyb3JfdGhyb3R0bGVfc2xlZXAiOjAsImZvbGRlciI6Ii90bXAvZGFzaGJvYXJkcyIsImxhYmVsIjoiZ3JhZmFuYV9kYXNoYm9hcmQiLCJsYWJlbFZhbHVlIjoiMSJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdoY3IuaW8va2l3aWdyaWQvazhzLXNpZGVjYXIiLCJ0YWciOiIxLjI4LjAifSwicmVzb3VyY2VzIjp7fX0sInNtdHAiOnsiZXhpc3RpbmdTZWNyZXQiOiIifSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TWV0cmljcyI6e30sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGwiOnRydWUsImV0bERhaWx5U3RvcmVEdXJhdGlvbkRheXMiOjkxLCJldGxGaWxlU3RvcmVFbmFibGVkIjp0cnVlLCJldGxIb3VybHlTdG9yZUR1cmF0aW9uSG91cnMiOjQ5LCJldGxSZWFkT25seU1vZGUiOmZhbHNlLCJleHRyYUFyZ3MiOltdLCJleHRyYVBvcnRzIjpbXSwiaW1hZ2UiOiJnY3IuaW8va3ViZWNvc3QxL2Nvc3QtbW9kZWwiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwibWF4UXVlcnlDb25jdXJyZW5jeSI6NSwicmVhZGluZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJyZXNvdXJjZXMiOnsicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjU1TWkifX0sInV0Y09mZnNldCI6IiswMDowMCIsIndhcm1DYWNoZSI6ZmFsc2V9LCJrdWJlY29zdFByb2R1Y3RDb25maWdzIjp7ImNsdXN0ZXJOYW1lIjoic3gtY25wLW9zcyBEZW1vIiwiY2x1c3RlclByb2ZpbGUiOiJkZXZlbG9wbWVudCIsImN1cnJlbmN5Q29kZSI6IkVVUiIsImN1c3RvbVByaWNlc0VuYWJsZWQiOnRydWUsImRlZmF1bHRNb2RlbFByaWNpbmciOnsiQ1BVIjoiMjguMCIsIkdQVSI6IjY5My41MCIsIlJBTSI6IjMuMDkiLCJlbmFibGVkIjp0cnVlLCJpbnRlcm5ldE5ldHdvcmtFZ3Jlc3MiOiIwLjEyIiwicmVnaW9uTmV0d29ya0VncmVzcyI6IjAuMDEiLCJzcG90Q1BVIjoiNC44NiIsInNwb3RHUFUiOiIyMjUuMCIsInNwb3RSQU0iOiIwLjY1Iiwic3RvcmFnZSI6IjAuMDQiLCJ6b25lTmV0d29ya0VncmVzcyI6IjAuMDEifSwiZ3JhZmFuYVVSTCI6Imh0dHBzOi8vZ3JhZmFuYS5sYWIuc3V4ZXNzaXQuazhzLmNsb3VkLnVpYmsuYWMuYXQifSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJhZGRpdGlvbmFsU2VjdXJpdHlDb250ZXh0Ijp7fSwiYWZmaW5pdHkiOnt9LCJhbm5vdGF0aW9ucyI6e30sImNvbmZpZyI6eyJkZXN0aW5hdGlvbnMiOnsiY3Jvc3MtcmVnaW9uIjpbXSwiZGlyZWN0LWNsYXNzaWZpY2F0aW9uIjpbXSwiaW4tcmVnaW9uIjpbXSwiaW4tem9uZSI6WyIxMjcuMC4wLjAvOCIsIjE2OS4yNTQuMC4wLzE2IiwiMTAuMC4wLjAvOCIsIjE3Mi4xNi4wLjAvMTIiLCIxOTIuMTY4LjAuMC8xNiJdLCJpbnRlcm5ldCI6W119LCJzZXJ2aWNlcyI6eyJhbWF6b24td2ViLXNlcnZpY2VzIjp0cnVlLCJhenVyZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZSwiZ29vZ2xlLWNsb3VkLXNlcnZpY2VzIjp0cnVlfX0sImVuYWJsZWQiOnRydWUsImV4dHJhQXJncyI6W10sImhlYWx0aENoZWNrUHJvYmVzIjp7fSwiaW1hZ2UiOnsicmVwb3NpdG9yeSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbmV0d29yay1jb3N0cyIsInRhZyI6InYwLjE3LjYifSwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibG9nTGV2ZWwiOiJpbmZvIiwibm9kZVNlbGVjdG9yIjp7fSwicG9ydCI6MzAwMSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJwcm9tZXRoZXVzU2NyYXBlIjpmYWxzZSwicmVzb3VyY2VzIjp7ImxpbWl0cyI6eyJjcHUiOiI1MDBtIn0sInJlcXVlc3RzIjp7ImNwdSI6IjUwbSIsIm1lbW9yeSI6IjIwTWkifX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9fSwidG9sZXJhdGlvbnMiOltdLCJ0cmFmZmljTG9nZ2luZyI6dHJ1ZSwidXBkYXRlU3RyYXRlZ3kiOnsidHlwZSI6IlJvbGxpbmdVcGRhdGUifX0sIm5vZGVTZWxlY3RvciI6e30sInBlcnNpc3RlbnRWb2x1bWUiOnsiYW5ub3RhdGlvbnMiOnt9LCJkYlBWRW5hYmxlZCI6ZmFsc2UsImRiU2l6ZSI6IjVHaSIsImVuYWJsZWQiOnRydWUsImxhYmVscyI6e30sInNpemUiOiI1R2kifSwicHJvbWV0aGV1cyI6eyJhbGVydG1hbmFnZXJGaWxlcyI6eyJhbGVydG1hbmFnZXIueW1sIjp7Imdsb2JhbCI6e30sInJlY2VpdmVycyI6W3sibmFtZSI6ImRlZmF1bHQtcmVjZWl2ZXIifV0sInJvdXRlIjp7Imdyb3VwX2ludGVydmFsIjoiNW0iLCJncm91cF93YWl0IjoiMTBzIiwicmVjZWl2ZXIiOiJkZWZhdWx0LXJlY2VpdmVyIiwicmVwZWF0X2ludGVydmFsIjoiM2gifX19LCJjb25maWdtYXBSZWxvYWQiOnt9LCJleHRyYVNjcmFwZUNvbmZpZ3MiOiItIGpvYl9uYW1lOiBrdWJlY29zdFxuICBob25vcl9sYWJlbHM6IHRydWVcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJjb3N0LWFuYWx5emVyLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHBvcnQ6IDkwMDNcbi0gam9iX25hbWU6IGt1YmVjb3N0LW5ldHdvcmtpbmdcbiAga3ViZXJuZXRlc19zZF9jb25maWdzOlxuICAgIC0gcm9sZTogcG9kXG4gIHJlbGFiZWxfY29uZmlnczpcbiAgIyBTY3JhcGUgb25seSB0aGUgdGhlIHRhcmdldHMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZyBtZXRhZGF0YVxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19pbnN0YW5jZV1cbiAgICAgIGFjdGlvbjoga2VlcFxuICAgICAgcmVnZXg6ICBrdWJlY29zdFxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIG5ldHdvcmstY29zdHNcbi0gam9iX25hbWU6IGt1YmVjb3N0LWFnZ3JlZ2F0b3JcbiAgc2NyYXBlX2ludGVydmFsOiAxbVxuICBzY3JhcGVfdGltZW91dDogNjBzXG4gIG1ldHJpY3NfcGF0aDogL21ldHJpY3NcbiAgc2NoZW1lOiBodHRwXG4gIGRuc19zZF9jb25maWdzOlxuICAtIG5hbWVzOlxuICAgIC0ge3sgdGVtcGxhdGUgXCJhZ2dyZWdhdG9yLnNlcnZpY2VOYW1lXCIgLiB9fVxuICAgIHR5cGU6ICdBJ1xuICAgIHt7LSBpZiBvciAuVmFsdWVzLnNhbWwuZW5hYmxlZCAuVmFsdWVzLm9pZGMuZW5hYmxlZCB9fVxuICAgIHBvcnQ6IDkwMDhcbiAgICB7ey0gZWxzZSB9fVxuICAgIHBvcnQ6IDkwMDRcbiAgICB7ey0gZW5kIH19XG4jIyBFbmFibGVzIHNjcmFwaW5nIG9mIE5WSURJQSBHUFUgbWV0cmljcyB2aWEgZGNnbS1leHBvcnRlci4gU2NyYXBlcyBhbGxcbiMjIGVuZHBvaW50cyB3aGljaCBjb250YWluIFwiZGNnbS1leHBvcnRlclwiIGluIGxhYmVscyBcImFwcFwiLFxuIyMgXCJhcHAua3ViZXJuZXRlcy5pby9jb21wb25lbnRcIiwgb3IgXCJhcHAua3ViZXJuZXRlcy5pby9uYW1lXCIgd2l0aCBhIGNhc2VcbiMjIGluc2Vuc2l0aXZlIG1hdGNoLlxuIyMgUmVmczpcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZ3B1LW9wZXJhdG9yL2Jsb2IvZDQzMTZhNDE1YmJkNjg0Y2U4NDE2YTg4MDQyMzA1ZmMxYTA5M2FhNC9hc3NldHMvc3RhdGUtZGNnbS1leHBvcnRlci8wNjAwX3NlcnZpY2UueWFtbCNMN1xuIyMgaHR0cHM6Ly9naXRodWIuY29tL05WSURJQS9kY2dtLWV4cG9ydGVyL2Jsb2IvNTRmZDFjYTEzN2M2NjUxMWE4N2E3MjAzOTA2MTM2ODBiOWJkYWJkZC9kZXBsb3ltZW50L3RlbXBsYXRlcy9zZXJ2aWNlLnlhbWwjTDIzXG4tIGpvYl9uYW1lOiBrdWJlY29zdC1kY2dtLWV4cG9ydGVyXG4gIGt1YmVybmV0ZXNfc2RfY29uZmlnczpcbiAgICAtIHJvbGU6IGVuZHBvaW50c1xuICByZWxhYmVsX2NvbmZpZ3M6XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2NvbXBvbmVudCwgX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAoP2kpKC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qfC4qZGNnbS1leHBvcnRlci4qKVxuIiwicmJhYyI6eyJjcmVhdGUiOnRydWV9LCJzZXJ2ZXIiOnsiYWZmaW5pdHkiOnt9LCJhbGVydG1hbmFnZXJzIjpbXSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImRlcGxveW1lbnRBbm5vdGF0aW9ucyI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sImFsZXJ0cyI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL3J1bGVzIiwiL2V0Yy9jb25maWcvYWxlcnRzIl0sInNjcmFwZV9jb25maWdzIjpbeyJqb2JfbmFtZSI6InByb21ldGhldXMiLCJzdGF0aWNfY29uZmlncyI6W3sidGFyZ2V0cyI6WyJsb2NhbGhvc3Q6OTA5MCJdfV19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMtY2Fkdmlzb3IiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFsfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9lcnJvcnNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfcGFja2V0c19kcm9wcGVkX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2ZzX3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9mc19saW1pdF9ieXRlc3xjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfdGhyb3R0bGVkX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19pbm9kZXNfZnJlZXxjb250YWluZXJfZnNfaW5vZGVzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX3NwZWNfY3B1X3NoYXJlc3xjb250YWluZXJfc3BlY19tZW1vcnlfbGltaXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfZnNfd3JpdGVzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9mc19yZWFkc19ieXRlc190b3RhbHxjYWR2aXNvcl92ZXJzaW9uX2luZm98a3ViZWNvc3RfcHZfaW5mbykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsiY29udGFpbmVyIl0sInRhcmdldF9sYWJlbCI6ImNvbnRhaW5lcl9uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJwb2QiXSwidGFyZ2V0X2xhYmVsIjoicG9kX25hbWUifV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbGFiZWxfKC4rKSJ9LHsicmVwbGFjZW1lbnQiOiJrdWJlcm5ldGVzLmRlZmF1bHQuc3ZjOjQ0MyIsInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJyZWdleCI6IiguKykiLCJyZXBsYWNlbWVudCI6Ii9hcGkvdjEvbm9kZXMvJDEvcHJveHkvbWV0cmljcy9jYWR2aXNvciIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifV0sInNjaGVtZSI6Imh0dHBzIiwidGxzX2NvbmZpZyI6eyJjYV9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L2NhLmNydCIsImluc2VjdXJlX3NraXBfdmVyaWZ5Ijp0cnVlfX0seyJiZWFyZXJfdG9rZW5fZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC90b2tlbiIsImpvYl9uYW1lIjoia3ViZXJuZXRlcy1ub2RlcyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6Im5vZGUifV0sIm1ldHJpY19yZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IihrdWJlbGV0X3ZvbHVtZV9zdGF0c191c2VkX2J5dGVzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19uYW1lX18iXX1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiam9iX25hbWUiOiJrdWJlcm5ldGVzLXNlcnZpY2UtZW5kcG9pbnRzIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoiZW5kcG9pbnRzIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoY29udGFpbmVyX2NwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZ3B1X2FsbG9jYXRpb258Y29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xjb250YWluZXJfbmV0d29ya19yZWNlaXZlX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2J5dGVzX3RvdGFsfERDR01fRklfREVWX0dQVV9VVElMfGRlcGxveW1lbnRfbWF0Y2hfbGFiZWxzfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19kZXNpcmVkX251bWJlcl9zY2hlZHVsZWR8a3ViZV9kYWVtb25zZXRfc3RhdHVzX251bWJlcl9yZWFkeXxrdWJlX2RlcGxveW1lbnRfc3BlY19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzfGt1YmVfZGVwbG95bWVudF9zdGF0dXNfcmVwbGljYXNfYXZhaWxhYmxlfGt1YmVfam9iX3N0YXR1c19mYWlsZWR8a3ViZV9uYW1lc3BhY2VfYW5ub3RhdGlvbnN8a3ViZV9uYW1lc3BhY2VfbGFiZWxzfGt1YmVfbm9kZV9pbmZvfGt1YmVfbm9kZV9sYWJlbHN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZXxrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2FsbG9jYXRhYmxlX21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5fGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfY3B1X2NvcmVzfGt1YmVfbm9kZV9zdGF0dXNfY2FwYWNpdHlfbWVtb3J5X2J5dGVzfGt1YmVfbm9kZV9zdGF0dXNfY29uZGl0aW9ufGt1YmVfcGVyc2lzdGVudHZvbHVtZV9jYXBhY2l0eV9ieXRlc3xrdWJlX3BlcnNpc3RlbnR2b2x1bWVfc3RhdHVzX3BoYXNlfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX2luZm98a3ViZV9wZXJzaXN0ZW50dm9sdW1lY2xhaW1fcmVzb3VyY2VfcmVxdWVzdHNfc3RvcmFnZV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfaW5mb3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9saW1pdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfY3B1X2NvcmVzfGt1YmVfcG9kX2NvbnRhaW5lcl9yZXNvdXJjZV9yZXF1ZXN0c19tZW1vcnlfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19yZXN0YXJ0c190b3RhbHxrdWJlX3BvZF9jb250YWluZXJfc3RhdHVzX3J1bm5pbmd8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c190ZXJtaW5hdGVkX3JlYXNvbnxrdWJlX3BvZF9sYWJlbHN8a3ViZV9wb2Rfb3duZXJ8a3ViZV9wb2Rfc3RhdHVzX3BoYXNlfGt1YmVfcmVwbGljYXNldF9vd25lcnxrdWJlX3N0YXRlZnVsc2V0X3JlcGxpY2FzfGt1YmVfc3RhdGVmdWxzZXRfc3RhdHVzX3JlcGxpY2FzfGt1YmVjb3N0X2NsdXN0ZXJfaW5mb3xrdWJlY29zdF9jbHVzdGVyX21hbmFnZW1lbnRfY29zdHxrdWJlY29zdF9jbHVzdGVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlc3xrdWJlY29zdF9sb2FkX2JhbGFuY2VyX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19pbnRlcm5ldF9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3JlZ2lvbl9lZ3Jlc3NfY29zdHxrdWJlY29zdF9uZXR3b3JrX3pvbmVfZWdyZXNzX2Nvc3R8a3ViZWNvc3Rfbm9kZV9pc19zcG90fGt1YmVjb3N0X3BvZF9uZXR3b3JrX2VncmVzc19ieXRlc190b3RhbHxub2RlX2NwdV9ob3VybHlfY29zdHxub2RlX2NwdV9zZWNvbmRzX3RvdGFsfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWR8bm9kZV9kaXNrX3JlYWRzX2NvbXBsZXRlZF90b3RhbHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZHxub2RlX2Rpc2tfd3JpdGVzX2NvbXBsZXRlZF90b3RhbHxub2RlX2ZpbGVzeXN0ZW1fZGV2aWNlX2Vycm9yfG5vZGVfZ3B1X2NvdW50fG5vZGVfZ3B1X2hvdXJseV9jb3N0fG5vZGVfbWVtb3J5X0J1ZmZlcnNfYnl0ZXN8bm9kZV9tZW1vcnlfQ2FjaGVkX2J5dGVzfG5vZGVfbWVtb3J5X01lbUF2YWlsYWJsZV9ieXRlc3xub2RlX21lbW9yeV9NZW1GcmVlX2J5dGVzfG5vZGVfbWVtb3J5X01lbVRvdGFsX2J5dGVzfG5vZGVfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxub2RlX3JhbV9ob3VybHlfY29zdHxub2RlX3RvdGFsX2hvdXJseV9jb3N0fHBvZF9wdmNfYWxsb2NhdGlvbnxwdl9ob3VybHlfY29zdHxzZXJ2aWNlX3NlbGVjdG9yX2xhYmVsc3xzdGF0ZWZ1bFNldF9tYXRjaF9sYWJlbHN8a3ViZWNvc3RfcHZfaW5mb3x1cCkiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOnRydWUsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NyYXBlIl19LHsiYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKC4qbm9kZS1leHBvcnRlcnxrdWJlY29zdC1uZXR3b3JrLWNvc3RzKSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfZW5kcG9pbnRzX25hbWUiXX0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoaHR0cHM/KSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fc2NoZW1lIl0sInRhcmdldF9sYWJlbCI6Il9fc2NoZW1lX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3BhdGgiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKFteOl0rKSg/OjpcXGQrKT87KFxcZCspIiwicmVwbGFjZW1lbnQiOiIkMTokMiIsInNvdXJjZV9sYWJlbHMiOlsiX19hZGRyZXNzX18iLCJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wb3J0Il0sInRhcmdldF9sYWJlbCI6Il9fYWRkcmVzc19fIn0seyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9sYWJlbF8oLispIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19uYW1lc3BhY2UiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lc3BhY2UifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJrdWJlcm5ldGVzX25hbWUifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3BvZF9ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19ub2RlIn1dfV19LCJyZWNvcmRpbmdfcnVsZXMueW1sIjp7fSwicnVsZXMiOnsiZ3JvdXBzIjpbeyJuYW1lIjoiQ1BVIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0ocmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlwifVs1bV0pKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlOnJhdGU1bSJ9LHsiZXhwciI6InJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSIsInJlY29yZCI6ImNsdXN0ZXI6Y3B1X3VzYWdlX25vc3VtOnJhdGU1bSJ9LHsiZXhwciI6ImF2ZyhpcmF0ZShjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx7Y29udGFpbmVyIT1cIlBPRFwiLCBjb250YWluZXIhPVwiXCJ9WzVtXSkpIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfY3B1X3VzYWdlX2lyYXRlIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIGJ5IChjb250YWluZXIscG9kLG5hbWVzcGFjZSkiLCJyZWNvcmQiOiJrdWJlY29zdF9jb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn0seyJleHByIjoic3VtKGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN7Y29udGFpbmVyIT1cIlBPRFwiLGNvbnRhaW5lciE9XCJcIn0pIiwicmVjb3JkIjoia3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXMifV19LHsibmFtZSI6IlNhdmluZ3MiLCJydWxlcyI6W3siZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZCE9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6ImZhbHNlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQ9XCJEYWVtb25TZXRcIn0pIGJ5IChwb2QpICogc3VtKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbikgYnkgKHBvZCkpIC8gc3VtKGt1YmVfbm9kZV9pbmZvKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJ0cnVlIn0sInJlY29yZCI6Imt1YmVjb3N0X3NhdmluZ3NfY3B1X2FsbG9jYXRpb24ifSx7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfbWVtb3J5X2FsbG9jYXRpb25fYnl0ZXMpIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzIn1dfV19fSwic2VydmljZUFjY291bnRzIjp7ImFsZXJ0bWFuYWdlciI6eyJjcmVhdGUiOnRydWV9LCJub2RlRXhwb3J0ZXIiOnsiY3JlYXRlIjp0cnVlfSwicHVzaGdhdGV3YXkiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlIjp0cnVlfX19LCJwcm9tZXRoZXVzUnVsZSI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZX0sInJlcG9ydGluZyI6eyJlcnJvclJlcG9ydGluZyI6dHJ1ZSwibG9nQ29sbGVjdGlvbiI6dHJ1ZSwicHJvZHVjdEFuYWx5dGljcyI6dHJ1ZSwidmFsdWVzUmVwb3J0aW5nIjp0cnVlfSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sIm5vZGVQb3J0Ijp7fSwicG9ydCI6OTA5MCwidGFyZ2V0UG9ydCI6OTA5MCwidHlwZSI6IkNsdXN0ZXJJUCJ9LCJzZXJ2aWNlQWNjb3VudCI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX0sInNlcnZpY2VNb25pdG9yIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJuZXR3b3JrQ29zdHMiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWUsImludGVydmFsIjoiMW0iLCJtZXRyaWNSZWxhYmVsaW5ncyI6W10sInJlbGFiZWxpbmdzIjpbXSwic2NyYXBlVGltZW91dCI6IjEwcyJ9LCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwic2lnVjRQcm94eSI6eyJob3N0IjoiYXBzLXdvcmtzcGFjZXMudXMtd2VzdC0yLmFtYXpvbmF3cy5jb20iLCJpbWFnZSI6InB1YmxpYy5lY3IuYXdzL2F3cy1vYnNlcnZhYmlsaXR5L2F3cy1zaWd2NC1wcm94eTpsYXRlc3QiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJuYW1lIjoiYXBzIiwicG9ydCI6ODAwNSwicmVnaW9uIjoidXMtd2VzdC0yIiwicmVzb3VyY2VzIjp7fX0sInN1cHBvcnRORlMiOmZhbHNlLCJ0b2xlcmF0aW9ucyI6W10sInRvcG9sb2d5U3ByZWFkQ29uc3RyYWludHMiOltdLCJ1cGdyYWRlIjp7InRvVjIiOmZhbHNlfX0=
+              value: eyJhZmZpbml0eSI6e30sImF3c3N0b3JlIjp7ImFubm90YXRpb25zIjp7fSwiY3JlYXRlU2VydmljZUFjY291bnQiOmZhbHNlLCJpbWFnZU5hbWVBbmRWZXJzaW9uIjoiZ2NyLmlvL2t1YmVjb3N0MS9hd3NzdG9yZTpsYXRlc3QiLCJub2RlU2VsZWN0b3IiOnt9LCJwcmlvcml0eUNsYXNzTmFtZSI6IiIsInVzZUF3c1N0b3JlIjpmYWxzZX0sImRpYWdub3N0aWNzIjp7ImNvbGxlY3RIZWxtVmFsdWVzIjpmYWxzZSwiZW5hYmxlZCI6dHJ1ZSwia2VlcERpYWdub3N0aWNIaXN0b3J5IjpmYWxzZSwicG9sbGluZ0ludGVydmFsIjoiMzAwcyJ9LCJleHRyYU9iamVjdHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImZlZGVyYXRlZEVUTCI6eyJhZ2VudE9ubHkiOmZhbHNlLCJmZWRlcmF0ZWRDbHVzdGVyIjpmYWxzZSwicmVhZE9ubHlQcmltYXJ5IjpmYWxzZSwicmVkaXJlY3RTM0JhY2t1cCI6ZmFsc2UsInVzZU11bHRpQ2x1c3RlckRCIjpmYWxzZX0sImZvcmVjYXN0aW5nIjp7ImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlbnYiOnsiR1VOSUNPUk5fQ01EX0FSR1MiOiItLWxvZy1sZXZlbCBpbmZvIC10IDEyMDAifSwiZnVsbEltYWdlTmFtZSI6Imdjci5pby9rdWJlY29zdDEva3ViZWNvc3QtbW9kZWxpbmc6djAuMS4xOCIsImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxpdmVuZXNzUHJvYmUiOnsiZW5hYmxlZCI6dHJ1ZSwiZmFpbHVyZVRocmVzaG9sZCI6MjAwLCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxMCwicGVyaW9kU2Vjb25kcyI6MTB9LCJub2RlU2VsZWN0b3IiOnt9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiMTUwMG0iLCJtZW1vcnkiOiIxR2kifSwicmVxdWVzdHMiOnsiY3B1IjoiMjAwbSIsIm1lbW9yeSI6IjMwME1pIn19LCJ0b2xlcmF0aW9ucyI6W119LCJnbG9iYWwiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImFubm90YXRpb25zIjp7fSwiY29udGFpbmVyU2VjdXJpdHlDb250ZXh0Ijp7ImFsbG93UHJpdmlsZWdlRXNjYWxhdGlvbiI6ZmFsc2UsImNhcGFiaWxpdGllcyI6eyJkcm9wIjpbIkFMTCJdfSwicHJpdmlsZWdlZCI6ZmFsc2UsInJlYWRPbmx5Um9vdEZpbGVzeXN0ZW0iOnRydWV9LCJpbnRlZ3JhdGlvbnMiOnt9LCJub3RpZmljYXRpb25zIjp7ImFsZXJ0bWFuYWdlciI6eyJlbmFibGVkIjp0cnVlLCJmcWRuIjoiaHR0cDovL3N4LWt1YmUtcHJvbWV0aGV1cy1zdGFjay1hbGVydG1hbmFnZXIubW9uaXRvcmluZzo5MDkzLyJ9fSwicGxhdGZvcm1zIjp7ImNpY2QiOnsiZW5hYmxlZCI6dHJ1ZSwic2tpcFNhbml0eUNoZWNrcyI6ZmFsc2V9fSwicG9kQW5ub3RhdGlvbnMiOnt9LCJzZWN1cml0eUNvbnRleHQiOnsiZnNHcm91cCI6MTAwMSwiZnNHcm91cENoYW5nZVBvbGljeSI6Ik9uUm9vdE1pc21hdGNoIiwicnVuQXNHcm91cCI6MTAwMSwicnVuQXNOb25Sb290Ijp0cnVlLCJydW5Bc1VzZXIiOjEwMDEsInNlY2NvbXBQcm9maWxlIjp7InR5cGUiOiJSdW50aW1lRGVmYXVsdCJ9fX0sImdyYWZhbmEiOnsiYWRtaW5QYXNzd29yZCI6InN0cm9uZ3Bhc3N3b3JkIiwiYWRtaW5Vc2VyIjoiYWRtaW4iLCJhZmZpbml0eSI6e30sImFubm90YXRpb25zIjp7fSwiZGFzaGJvYXJkUHJvdmlkZXJzIjp7fSwiZGFzaGJvYXJkcyI6e30sImRhc2hib2FyZHNDb25maWdNYXBzIjp7fSwiZGVwbG95bWVudFN0cmF0ZWd5IjoiUm9sbGluZ1VwZGF0ZSIsImRvd25sb2FkRGFzaGJvYXJkc0ltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiY3VybGltYWdlcy9jdXJsIiwidGFnIjoibGF0ZXN0In0sImVudiI6e30sImVudkZyb21TZWNyZXQiOiIiLCJleHRyYVNlY3JldE1vdW50cyI6W10sImdyYWZhbmEuaW5pIjp7ImFuYWx5dGljcyI6eyJjaGVja19mb3JfdXBkYXRlcyI6dHJ1ZX0sImF1dGguYW5vbnltb3VzIjp7ImVuYWJsZWQiOnRydWUsIm9yZ19uYW1lIjoiTWFpbiBPcmcuIiwib3JnX3JvbGUiOiJFZGl0b3IifSwiZ3JhZmFuYV9uZXQiOnsidXJsIjoiaHR0cHM6Ly9ncmFmYW5hLm5ldCJ9LCJsb2ciOnsibW9kZSI6ImNvbnNvbGUifSwicGF0aHMiOnsiZGF0YSI6Ii92YXIvbGliL2dyYWZhbmEvZGF0YSIsImxvZ3MiOiIvdmFyL2xvZy9ncmFmYW5hIiwicGx1Z2lucyI6Ii92YXIvbGliL2dyYWZhbmEvcGx1Z2lucyIsInByb3Zpc2lvbmluZyI6Ii9ldGMvZ3JhZmFuYS9wcm92aXNpb25pbmcifSwic2VydmVyIjp7InJvb3RfdXJsIjoiJShwcm90b2NvbClzOi8vJShkb21haW4pczolKGh0dHBfcG9ydClzL2dyYWZhbmEiLCJzZXJ2ZV9mcm9tX3N1Yl9wYXRoIjpmYWxzZX19LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6ImdyYWZhbmEvZ3JhZmFuYSIsInRhZyI6IjExLjMuMSJ9LCJsaXZlbmVzc1Byb2JlIjp7ImZhaWx1cmVUaHJlc2hvbGQiOjEwLCJodHRwR2V0Ijp7InBhdGgiOiIvYXBpL2hlYWx0aCIsInBvcnQiOjMwMDB9LCJpbml0aWFsRGVsYXlTZWNvbmRzIjo2MCwidGltZW91dFNlY29uZHMiOjMwfSwibm9kZVNlbGVjdG9yIjp7fSwicGx1Z2lucyI6W10sInBvZEFubm90YXRpb25zIjp7fSwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyYmFjIjp7ImNyZWF0ZSI6dHJ1ZX0sInJlYWRpbmVzc1Byb2JlIjp7Imh0dHBHZXQiOnsicGF0aCI6Ii9hcGkvaGVhbHRoIiwicG9ydCI6MzAwMH19LCJyZXBsaWNhcyI6MSwicmVzb3VyY2VzIjp7fSwic2VjdXJpdHlDb250ZXh0Ijp7fSwic2VydmljZSI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInBvcnQiOjgwLCJ0eXBlIjoiQ2x1c3RlcklQIn0sInNlcnZpY2VBY2NvdW50Ijp7ImNyZWF0ZSI6dHJ1ZSwibmFtZSI6IiJ9LCJzaWRlY2FyIjp7ImRhc2hib2FyZHMiOnsiYW5ub3RhdGlvbnMiOnt9LCJlbmFibGVkIjp0cnVlLCJlcnJvcl90aHJvdHRsZV9zbGVlcCI6MCwiZm9sZGVyIjoiL3RtcC9kYXNoYm9hcmRzIiwibGFiZWwiOiJncmFmYW5hX2Rhc2hib2FyZCIsImxhYmVsVmFsdWUiOiIxIn0sImltYWdlIjp7InB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJyZXBvc2l0b3J5IjoiZ2hjci5pby9raXdpZ3JpZC9rOHMtc2lkZWNhciIsInRhZyI6IjEuMjguMSJ9LCJyZXNvdXJjZXMiOnt9fSwidG9sZXJhdGlvbnMiOltdfSwiaW5ncmVzcyI6eyJhbm5vdGF0aW9ucyI6eyJjZXJ0LmdhcmRlbmVyLmNsb3VkL3B1cnBvc2UiOiJtYW5hZ2VkIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2NsYXNzIjoiZ2FyZGVuIiwiZG5zLmdhcmRlbmVyLmNsb3VkL2Ruc25hbWVzIjoia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0IiwiZG5zLmdhcmRlbmVyLmNsb3VkL3R0bCI6IjE4MCJ9LCJjbGFzc05hbWUiOiJuZ2lueCIsImVuYWJsZWQiOnRydWUsImhvc3RzIjpbImt1YmVjb3N0LmxhYi5zdXhlc3NpdC5rOHMuY2xvdWQudWliay5hYy5hdCJdLCJwYXRoVHlwZSI6IkltcGxlbWVudGF0aW9uU3BlY2lmaWMiLCJwYXRocyI6WyIvIl0sInRscyI6W3siaG9zdHMiOlsia3ViZWNvc3QubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0Il0sInNlY3JldE5hbWUiOiJrdWJlY29zdC1zZXJ2ZXItdGxzIn1dfSwiaW5pdENob3duRGF0YSI6eyJyZXNvdXJjZXMiOnt9fSwiaW5pdENob3duRGF0YUltYWdlIjoiYnVzeWJveCIsImt1YmVjb3N0RGVwbG95bWVudCI6eyJhbm5vdGF0aW9ucyI6e30sImxhYmVscyI6e30sInJlcGxpY2FzIjoxfSwia3ViZWNvc3RGcm9udGVuZCI6eyJkZXBsb3lNZXRob2QiOiJzaW5nbGVwb2QiLCJkZXBsb3ltZW50U3RyYXRlZ3kiOnt9LCJlbmFibGVkIjp0cnVlLCJoYVJlcGxpY2FzIjoyLCJpbWFnZSI6Imdjci5pby9rdWJlY29zdDEvZnJvbnRlbmQiLCJpbWFnZVB1bGxQb2xpY3kiOiJJZk5vdFByZXNlbnQiLCJpcHY2Ijp7ImVuYWJsZWQiOnRydWV9LCJsaXZlbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjYsImluaXRpYWxEZWxheVNlY29uZHMiOjEsInBlcmlvZFNlY29uZHMiOjV9LCJyZWFkaW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjo2LCJpbml0aWFsRGVsYXlTZWNvbmRzIjoxLCJwZXJpb2RTZWNvbmRzIjo1fSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjEwbSIsIm1lbW9yeSI6IjU1TWkifX0sInVzZURlZmF1bHRGcWRuIjpmYWxzZX0sImt1YmVjb3N0TW9kZWwiOnsiY29udGFpbmVyU3RhdHNFbmFibGVkIjp0cnVlLCJldGxEYWlseVN0b3JlRHVyYXRpb25EYXlzIjo5MSwiZXRsSG91cmx5U3RvcmVEdXJhdGlvbkhvdXJzIjo0OSwiZXRsUmVhZE9ubHlNb2RlIjpmYWxzZSwiZXh0cmFBcmdzIjpbXSwiZXh0cmFQb3J0cyI6W10sImltYWdlIjoiZ2NyLmlvL2t1YmVjb3N0MS9jb3N0LW1vZGVsIiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibGl2ZW5lc3NQcm9iZSI6eyJlbmFibGVkIjp0cnVlLCJmYWlsdXJlVGhyZXNob2xkIjoyMDAsImluaXRpYWxEZWxheVNlY29uZHMiOjEwLCJwZXJpb2RTZWNvbmRzIjoxMH0sImxvZ0xldmVsIjoiaW5mbyIsIm1heFF1ZXJ5Q29uY3VycmVuY3kiOjUsInJlYWRpbmVzc1Byb2JlIjp7ImVuYWJsZWQiOnRydWUsImZhaWx1cmVUaHJlc2hvbGQiOjIwMCwiaW5pdGlhbERlbGF5U2Vjb25kcyI6MTAsInBlcmlvZFNlY29uZHMiOjEwfSwicmVzb3VyY2VzIjp7InJlcXVlc3RzIjp7ImNwdSI6IjIwMG0iLCJtZW1vcnkiOiI1NU1pIn19LCJ1dGNPZmZzZXQiOiIrMDA6MDAifSwia3ViZWNvc3RQcm9kdWN0Q29uZmlncyI6eyJjbHVzdGVyTmFtZSI6InN4LWNucC1vc3MgRGVtbyIsImNsdXN0ZXJQcm9maWxlIjoiZGV2ZWxvcG1lbnQiLCJjdXJyZW5jeUNvZGUiOiJFVVIiLCJjdXN0b21QcmljZXNFbmFibGVkIjp0cnVlLCJkZWZhdWx0TW9kZWxQcmljaW5nIjp7IkNQVSI6IjI4LjAiLCJHUFUiOiI2OTMuNTAiLCJSQU0iOiIzLjA5IiwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJuZXROZXR3b3JrRWdyZXNzIjoiMC4xMiIsInJlZ2lvbk5ldHdvcmtFZ3Jlc3MiOiIwLjAxIiwic3BvdENQVSI6IjQuODYiLCJzcG90R1BVIjoiMjI1LjAiLCJzcG90UkFNIjoiMC42NSIsInN0b3JhZ2UiOiIwLjA0Iiwiem9uZU5ldHdvcmtFZ3Jlc3MiOiIwLjAxIn0sImdyYWZhbmFVUkwiOiJodHRwczovL2dyYWZhbmEubGFiLnN1eGVzc2l0Lms4cy5jbG91ZC51aWJrLmFjLmF0In0sIm5ldHdvcmtDb3N0cyI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiYWRkaXRpb25hbFNlY3VyaXR5Q29udGV4dCI6e30sImFmZmluaXR5Ijp7fSwiYW5ub3RhdGlvbnMiOnt9LCJjb25maWciOnsiZGVzdGluYXRpb25zIjp7ImNyb3NzLXJlZ2lvbiI6W10sImRpcmVjdC1jbGFzc2lmaWNhdGlvbiI6W10sImluLXJlZ2lvbiI6W10sImluLXpvbmUiOlsiMTI3LjAuMC4wLzgiLCIxNjkuMjU0LjAuMC8xNiIsIjEwLjAuMC4wLzgiLCIxNzIuMTYuMC4wLzEyIiwiMTkyLjE2OC4wLjAvMTYiXSwiaW50ZXJuZXQiOltdfSwic2VydmljZXMiOnsiYW1hem9uLXdlYi1zZXJ2aWNlcyI6dHJ1ZSwiYXp1cmUtY2xvdWQtc2VydmljZXMiOnRydWUsImdvb2dsZS1jbG91ZC1zZXJ2aWNlcyI6dHJ1ZX19LCJlbmFibGVkIjp0cnVlLCJleHRyYUFyZ3MiOltdLCJoZWFsdGhDaGVja1Byb2JlcyI6e30sImltYWdlIjp7InJlcG9zaXRvcnkiOiJnY3IuaW8va3ViZWNvc3QxL2t1YmVjb3N0LW5ldHdvcmstY29zdHMiLCJ0YWciOiJ2MC4xNy42In0sImltYWdlUHVsbFBvbGljeSI6IklmTm90UHJlc2VudCIsImxvZ0xldmVsIjoiaW5mbyIsIm5vZGVTZWxlY3RvciI6e30sInBvcnQiOjMwMDEsInByaW9yaXR5Q2xhc3NOYW1lIjoiIiwicHJvbWV0aGV1c1NjcmFwZSI6ZmFsc2UsInJlc291cmNlcyI6eyJsaW1pdHMiOnsiY3B1IjoiNTAwbSJ9LCJyZXF1ZXN0cyI6eyJjcHUiOiI1MG0iLCJtZW1vcnkiOiIyME1pIn19LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwibGFiZWxzIjp7fX0sInRvbGVyYXRpb25zIjpbXSwidHJhZmZpY0xvZ2dpbmciOnRydWUsInVwZGF0ZVN0cmF0ZWd5Ijp7InR5cGUiOiJSb2xsaW5nVXBkYXRlIn19LCJub2RlU2VsZWN0b3IiOnt9LCJwZXJzaXN0ZW50Vm9sdW1lIjp7ImFubm90YXRpb25zIjp7fSwiZGJTaXplIjoiNUdpIiwiZW5hYmxlZCI6dHJ1ZSwibGFiZWxzIjp7fSwic2l6ZSI6IjVHaSJ9LCJwcm9tZXRoZXVzIjp7ImFsZXJ0bWFuYWdlckZpbGVzIjp7ImFsZXJ0bWFuYWdlci55bWwiOnsiZ2xvYmFsIjp7fSwicmVjZWl2ZXJzIjpbeyJuYW1lIjoiZGVmYXVsdC1yZWNlaXZlciJ9XSwicm91dGUiOnsiZ3JvdXBfaW50ZXJ2YWwiOiI1bSIsImdyb3VwX3dhaXQiOiIxMHMiLCJyZWNlaXZlciI6ImRlZmF1bHQtcmVjZWl2ZXIiLCJyZXBlYXRfaW50ZXJ2YWwiOiIzaCJ9fX0sImNvbmZpZ21hcFJlbG9hZCI6e30sImV4dHJhU2NyYXBlQ29uZmlncyI6Ii0gam9iX25hbWU6IGt1YmVjb3N0XG4gIGhvbm9yX2xhYmVsczogdHJ1ZVxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImNvc3QtYW5hbHl6ZXIuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAgcG9ydDogOTAwM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtbmV0d29ya2luZ1xuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBwb2RcbiAgcmVsYWJlbF9jb25maWdzOlxuICAjIFNjcmFwZSBvbmx5IHRoZSB0aGUgdGFyZ2V0cyBtYXRjaGluZyB0aGUgZm9sbG93aW5nIG1ldGFkYXRhXG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX2luc3RhbmNlXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogIGt1YmVjb3N0XG4gICAgLSBzb3VyY2VfbGFiZWxzOiBbX19tZXRhX2t1YmVybmV0ZXNfcG9kX2xhYmVsX2FwcF9rdWJlcm5ldGVzX2lvX25hbWVdXG4gICAgICBhY3Rpb246IGtlZXBcbiAgICAgIHJlZ2V4OiAgbmV0d29yay1jb3N0c1xuLSBqb2JfbmFtZToga3ViZWNvc3QtYWdncmVnYXRvclxuICBzY3JhcGVfaW50ZXJ2YWw6IDFtXG4gIHNjcmFwZV90aW1lb3V0OiA2MHNcbiAgbWV0cmljc19wYXRoOiAvbWV0cmljc1xuICBzY2hlbWU6IGh0dHBcbiAgZG5zX3NkX2NvbmZpZ3M6XG4gIC0gbmFtZXM6XG4gICAgLSB7eyB0ZW1wbGF0ZSBcImFnZ3JlZ2F0b3Iuc2VydmljZU5hbWVcIiAuIH19XG4gICAgdHlwZTogJ0EnXG4gICAge3stIGlmIG9yIC5WYWx1ZXMuc2FtbC5lbmFibGVkIC5WYWx1ZXMub2lkYy5lbmFibGVkIH19XG4gICAgcG9ydDogOTAwOFxuICAgIHt7LSBlbHNlIH19XG4gICAgcG9ydDogOTAwNFxuICAgIHt7LSBlbmQgfX1cbiMjIEVuYWJsZXMgc2NyYXBpbmcgb2YgTlZJRElBIEdQVSBtZXRyaWNzIHZpYSBkY2dtLWV4cG9ydGVyLiBTY3JhcGVzIGFsbFxuIyMgZW5kcG9pbnRzIHdoaWNoIGNvbnRhaW4gXCJkY2dtLWV4cG9ydGVyXCIgaW4gbGFiZWxzIFwiYXBwXCIsXG4jIyBcImFwcC5rdWJlcm5ldGVzLmlvL2NvbXBvbmVudFwiLCBvciBcImFwcC5rdWJlcm5ldGVzLmlvL25hbWVcIiB3aXRoIGEgY2FzZVxuIyMgaW5zZW5zaXRpdmUgbWF0Y2guIFRoZSBsYWJlbCBtdXN0IGJlIHByZXNlbnQgb24gdGhlIEs4cyBzZXJ2aWNlIGVuZHBvaW50cyBhbmQgbm90IGp1c3QgcG9kcy5cbiMjIFJlZnM6XG4jIyBodHRwczovL2dpdGh1Yi5jb20vTlZJRElBL2dwdS1vcGVyYXRvci9ibG9iL2Q0MzE2YTQxNWJiZDY4NGNlODQxNmE4ODA0MjMwNWZjMWEwOTNhYTQvYXNzZXRzL3N0YXRlLWRjZ20tZXhwb3J0ZXIvMDYwMF9zZXJ2aWNlLnlhbWwjTDdcbiMjIGh0dHBzOi8vZ2l0aHViLmNvbS9OVklESUEvZGNnbS1leHBvcnRlci9ibG9iLzU0ZmQxY2ExMzdjNjY1MTFhODdhNzIwMzkwNjEzNjgwYjliZGFiZGQvZGVwbG95bWVudC90ZW1wbGF0ZXMvc2VydmljZS55YW1sI0wyM1xuLSBqb2JfbmFtZToga3ViZWNvc3QtZGNnbS1leHBvcnRlclxuICBrdWJlcm5ldGVzX3NkX2NvbmZpZ3M6XG4gICAgLSByb2xlOiBlbmRwb2ludHNcbiAgcmVsYWJlbF9jb25maWdzOlxuICAgIC0gc291cmNlX2xhYmVsczogW19fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHAsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19jb21wb25lbnQsIF9fbWV0YV9rdWJlcm5ldGVzX3BvZF9sYWJlbF9hcHBfa3ViZXJuZXRlc19pb19uYW1lXVxuICAgICAgYWN0aW9uOiBrZWVwXG4gICAgICByZWdleDogKD9pKSguKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKnwuKmRjZ20tZXhwb3J0ZXIuKilcbiIsInJiYWMiOnsiY3JlYXRlIjp0cnVlfSwic2VydmVyIjp7ImFmZmluaXR5Ijp7fSwiYWxlcnRtYW5hZ2VycyI6W10sImFubm90YXRpb25zIjp7fSwiYmFzZVVSTCI6IiIsImNvbmZpZ01hcE92ZXJyaWRlTmFtZSI6IiIsImNvbmZpZ1BhdGgiOiIvZXRjL2NvbmZpZy9wcm9tZXRoZXVzLnltbCIsImNvbnRhaW5lclNlY3VyaXR5Q29udGV4dCI6e30sImVtcHR5RGlyIjp7InNpemVMaW1pdCI6IiJ9LCJlbmFibGVkIjp0cnVlLCJlbnYiOltdLCJleHRyYUFyZ3MiOnsicXVlcnkubWF4LWNvbmN1cnJlbmN5IjoxLCJxdWVyeS5tYXgtc2FtcGxlcyI6MTAwMDAwMDAwfSwiZXh0cmFDb25maWdtYXBNb3VudHMiOltdLCJleHRyYUZsYWdzIjpbIndlYi5lbmFibGUtbGlmZWN5Y2xlIl0sImV4dHJhSG9zdFBhdGhNb3VudHMiOltdLCJleHRyYUluaXRDb250YWluZXJzIjpbXSwiZXh0cmFTZWNyZXRNb3VudHMiOltdLCJleHRyYVZvbHVtZU1vdW50cyI6W10sImV4dHJhVm9sdW1lcyI6W10sImdsb2JhbCI6eyJldmFsdWF0aW9uX2ludGVydmFsIjoiMW0iLCJleHRlcm5hbF9sYWJlbHMiOnsiY2x1c3Rlcl9pZCI6InN4LWNucC1vc3MifSwic2NyYXBlX2ludGVydmFsIjoiMW0iLCJzY3JhcGVfdGltZW91dCI6IjYwcyJ9LCJpbWFnZSI6eyJwdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwicmVwb3NpdG9yeSI6InF1YXkuaW8vcHJvbWV0aGV1cy9wcm9tZXRoZXVzIiwidGFnIjoidjIuNTUuMSJ9LCJsaXZlbmVzc1Byb2JlRmFpbHVyZVRocmVzaG9sZCI6MywibGl2ZW5lc3NQcm9iZUluaXRpYWxEZWxheSI6NSwibGl2ZW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsImxpdmVuZXNzUHJvYmVUaW1lb3V0IjozLCJuYW1lIjoic2VydmVyIiwibm9kZVNlbGVjdG9yIjp7fSwicGVyc2lzdGVudFZvbHVtZSI6eyJhY2Nlc3NNb2RlcyI6WyJSZWFkV3JpdGVPbmNlIl0sImFubm90YXRpb25zIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiZXhpc3RpbmdDbGFpbSI6IiIsIm1vdW50UGF0aCI6Ii9kYXRhIiwic2l6ZSI6IjMyR2kiLCJzdWJQYXRoIjoiIn0sInBvZEFubm90YXRpb25zIjp7fSwicG9kTGFiZWxzIjp7fSwicHJlZml4VVJMIjoiIiwicHJpb3JpdHlDbGFzc05hbWUiOiIiLCJyZWFkaW5lc3NQcm9iZUZhaWx1cmVUaHJlc2hvbGQiOjMsInJlYWRpbmVzc1Byb2JlSW5pdGlhbERlbGF5Ijo1LCJyZWFkaW5lc3NQcm9iZVN1Y2Nlc3NUaHJlc2hvbGQiOjEsInJlYWRpbmVzc1Byb2JlVGltZW91dCI6MywicmVtb3RlUmVhZCI6e30sInJlbW90ZVdyaXRlIjp7fSwicmVwbGljYUNvdW50IjoxLCJyZXNvdXJjZXMiOnt9LCJyZXRlbnRpb24iOiI5N2giLCJzZWN1cml0eUNvbnRleHQiOnt9LCJzZXJ2aWNlIjp7ImFubm90YXRpb25zIjp7fSwiY2x1c3RlcklQIjoiIiwiZXh0ZXJuYWxJUHMiOltdLCJsYWJlbHMiOnt9LCJsb2FkQmFsYW5jZXJJUCI6IiIsImxvYWRCYWxhbmNlclNvdXJjZVJhbmdlcyI6W10sInNlcnZpY2VQb3J0Ijo4MCwic2Vzc2lvbkFmZmluaXR5IjoiTm9uZSIsInR5cGUiOiJDbHVzdGVySVAifSwic3RyYXRlZ3kiOnsidHlwZSI6IlJlY3JlYXRlIn0sInRlcm1pbmF0aW9uR3JhY2VQZXJpb2RTZWNvbmRzIjozMDAsInRvbGVyYXRpb25zIjpbXX0sInNlcnZlckZpbGVzIjp7ImFsZXJ0aW5nX3J1bGVzLnltbCI6e30sInByb21ldGhldXMueW1sIjp7InJ1bGVfZmlsZXMiOlsiL2V0Yy9jb25maWcvcmVjb3JkaW5nX3J1bGVzLnltbCIsIi9ldGMvY29uZmlnL2FsZXJ0aW5nX3J1bGVzLnltbCJdLCJzY3JhcGVfY29uZmlncyI6W3siam9iX25hbWUiOiJwcm9tZXRoZXVzIiwic3RhdGljX2NvbmZpZ3MiOlt7InRhcmdldHMiOlsibG9jYWxob3N0OjkwOTAiXX1dfSx7ImJlYXJlcl90b2tlbl9maWxlIjoiL3Zhci9ydW4vc2VjcmV0cy9rdWJlcm5ldGVzLmlvL3NlcnZpY2VhY2NvdW50L3Rva2VuIiwiam9iX25hbWUiOiJrdWJlcm5ldGVzLW5vZGVzLWNhZHZpc29yIiwia3ViZXJuZXRlc19zZF9jb25maWdzIjpbeyJyb2xlIjoibm9kZSJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHxjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfZXJyb3JzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3RyYW5zbWl0X2Vycm9yc190b3RhbHxjb250YWluZXJfbmV0d29ya19yZWNlaXZlX3BhY2tldHNfZHJvcHBlZF90b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9wYWNrZXRzX2Ryb3BwZWRfdG90YWx8Y29udGFpbmVyX21lbW9yeV91c2FnZV9ieXRlc3xjb250YWluZXJfY3B1X2Nmc190aHJvdHRsZWRfcGVyaW9kc190b3RhbHxjb250YWluZXJfY3B1X2Nmc19wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9mc191c2FnZV9ieXRlc3xjb250YWluZXJfZnNfbGltaXRfYnl0ZXN8Y29udGFpbmVyX2NwdV9jZnNfcGVyaW9kc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9jcHVfY2ZzX3Rocm90dGxlZF9wZXJpb2RzX3RvdGFsfGNvbnRhaW5lcl9jcHVfY2ZzX3BlcmlvZHNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxjb250YWluZXJfZnNfaW5vZGVzX2ZyZWV8Y29udGFpbmVyX2ZzX2lub2Rlc190b3RhbHxjb250YWluZXJfZnNfdXNhZ2VfYnl0ZXN8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9zcGVjX2NwdV9zaGFyZXN8Y29udGFpbmVyX3NwZWNfbWVtb3J5X2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3JlYWRzX2J5dGVzX3RvdGFsfGNvbnRhaW5lcl9uZXR3b3JrX3JlY2VpdmVfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2ZzX3dyaXRlc19ieXRlc190b3RhbHxjb250YWluZXJfZnNfcmVhZHNfYnl0ZXNfdG90YWx8Y2Fkdmlzb3JfdmVyc2lvbl9pbmZvfGt1YmVjb3N0X3B2X2luZm8pIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IiguKykiLCJzb3VyY2VfbGFiZWxzIjpbImNvbnRhaW5lciJdLCJ0YXJnZXRfbGFiZWwiOiJjb250YWluZXJfbmFtZSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKC4rKSIsInNvdXJjZV9sYWJlbHMiOlsicG9kIl0sInRhcmdldF9sYWJlbCI6InBvZF9uYW1lIn1dLCJyZWxhYmVsX2NvbmZpZ3MiOlt7ImFjdGlvbiI6ImxhYmVsbWFwIiwicmVnZXgiOiJfX21ldGFfa3ViZXJuZXRlc19ub2RlX2xhYmVsXyguKykifSx7InJlcGxhY2VtZW50Ijoia3ViZXJuZXRlcy5kZWZhdWx0LnN2Yzo0NDMiLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsicmVnZXgiOiIoLispIiwicmVwbGFjZW1lbnQiOiIvYXBpL3YxL25vZGVzLyQxL3Byb3h5L21ldHJpY3MvY2Fkdmlzb3IiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX25vZGVfbmFtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX21ldHJpY3NfcGF0aF9fIn1dLCJzY2hlbWUiOiJodHRwcyIsInRsc19jb25maWciOnsiY2FfZmlsZSI6Ii92YXIvcnVuL3NlY3JldHMva3ViZXJuZXRlcy5pby9zZXJ2aWNlYWNjb3VudC9jYS5jcnQiLCJpbnNlY3VyZV9za2lwX3ZlcmlmeSI6dHJ1ZX19LHsiYmVhcmVyX3Rva2VuX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvdG9rZW4iLCJqb2JfbmFtZSI6Imt1YmVybmV0ZXMtbm9kZXMiLCJrdWJlcm5ldGVzX3NkX2NvbmZpZ3MiOlt7InJvbGUiOiJub2RlIn1dLCJtZXRyaWNfcmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJrZWVwIiwicmVnZXgiOiIoa3ViZWxldF92b2x1bWVfc3RhdHNfdXNlZF9ieXRlcykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbmFtZV9fIl19XSwicmVsYWJlbF9jb25maWdzIjpbeyJhY3Rpb24iOiJsYWJlbG1hcCIsInJlZ2V4IjoiX19tZXRhX2t1YmVybmV0ZXNfbm9kZV9sYWJlbF8oLispIn0seyJyZXBsYWNlbWVudCI6Imt1YmVybmV0ZXMuZGVmYXVsdC5zdmM6NDQzIiwidGFyZ2V0X2xhYmVsIjoiX19hZGRyZXNzX18ifSx7InJlZ2V4IjoiKC4rKSIsInJlcGxhY2VtZW50IjoiL2FwaS92MS9ub2Rlcy8kMS9wcm94eS9tZXRyaWNzIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19ub2RlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoiX19tZXRyaWNzX3BhdGhfXyJ9XSwic2NoZW1lIjoiaHR0cHMiLCJ0bHNfY29uZmlnIjp7ImNhX2ZpbGUiOiIvdmFyL3J1bi9zZWNyZXRzL2t1YmVybmV0ZXMuaW8vc2VydmljZWFjY291bnQvY2EuY3J0IiwiaW5zZWN1cmVfc2tpcF92ZXJpZnkiOnRydWV9fSx7ImpvYl9uYW1lIjoia3ViZXJuZXRlcy1zZXJ2aWNlLWVuZHBvaW50cyIsImt1YmVybmV0ZXNfc2RfY29uZmlncyI6W3sicm9sZSI6ImVuZHBvaW50cyJ9XSwibWV0cmljX3JlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4IjoiKGNvbnRhaW5lcl9jcHVfYWxsb2NhdGlvbnxjb250YWluZXJfY3B1X3VzYWdlX3NlY29uZHNfdG90YWx8Y29udGFpbmVyX2ZzX2xpbWl0X2J5dGVzfGNvbnRhaW5lcl9mc193cml0ZXNfYnl0ZXNfdG90YWx8Y29udGFpbmVyX2dwdV9hbGxvY2F0aW9ufGNvbnRhaW5lcl9tZW1vcnlfYWxsb2NhdGlvbl9ieXRlc3xjb250YWluZXJfbWVtb3J5X3VzYWdlX2J5dGVzfGNvbnRhaW5lcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8Y29udGFpbmVyX25ldHdvcmtfcmVjZWl2ZV9ieXRlc190b3RhbHxjb250YWluZXJfbmV0d29ya190cmFuc21pdF9ieXRlc190b3RhbHxEQ0dNX0ZJX0RFVl9HUFVfVVRJTHxkZXBsb3ltZW50X21hdGNoX2xhYmVsc3xrdWJlX2RhZW1vbnNldF9zdGF0dXNfZGVzaXJlZF9udW1iZXJfc2NoZWR1bGVkfGt1YmVfZGFlbW9uc2V0X3N0YXR1c19udW1iZXJfcmVhZHl8a3ViZV9kZXBsb3ltZW50X3NwZWNfcmVwbGljYXN8a3ViZV9kZXBsb3ltZW50X3N0YXR1c19yZXBsaWNhc3xrdWJlX2RlcGxveW1lbnRfc3RhdHVzX3JlcGxpY2FzX2F2YWlsYWJsZXxrdWJlX2pvYl9zdGF0dXNfZmFpbGVkfGt1YmVfbmFtZXNwYWNlX2Fubm90YXRpb25zfGt1YmVfbmFtZXNwYWNlX2xhYmVsc3xrdWJlX25vZGVfaW5mb3xrdWJlX25vZGVfbGFiZWxzfGt1YmVfbm9kZV9zdGF0dXNfYWxsb2NhdGFibGV8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9jcHVfY29yZXN8a3ViZV9ub2RlX3N0YXR1c19hbGxvY2F0YWJsZV9tZW1vcnlfYnl0ZXN8a3ViZV9ub2RlX3N0YXR1c19jYXBhY2l0eXxrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X2NwdV9jb3Jlc3xrdWJlX25vZGVfc3RhdHVzX2NhcGFjaXR5X21lbW9yeV9ieXRlc3xrdWJlX25vZGVfc3RhdHVzX2NvbmRpdGlvbnxrdWJlX3BlcnNpc3RlbnR2b2x1bWVfY2FwYWNpdHlfYnl0ZXN8a3ViZV9wZXJzaXN0ZW50dm9sdW1lX3N0YXR1c19waGFzZXxrdWJlX3BlcnNpc3RlbnR2b2x1bWVjbGFpbV9pbmZvfGt1YmVfcGVyc2lzdGVudHZvbHVtZWNsYWltX3Jlc291cmNlX3JlcXVlc3RzX3N0b3JhZ2VfYnl0ZXN8a3ViZV9wb2RfY29udGFpbmVyX2luZm98a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX2xpbWl0c3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfbGltaXRzX21lbW9yeV9ieXRlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHN8a3ViZV9wb2RfY29udGFpbmVyX3Jlc291cmNlX3JlcXVlc3RzX2NwdV9jb3Jlc3xrdWJlX3BvZF9jb250YWluZXJfcmVzb3VyY2VfcmVxdWVzdHNfbWVtb3J5X2J5dGVzfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfcmVzdGFydHNfdG90YWx8a3ViZV9wb2RfY29udGFpbmVyX3N0YXR1c19ydW5uaW5nfGt1YmVfcG9kX2NvbnRhaW5lcl9zdGF0dXNfdGVybWluYXRlZF9yZWFzb258a3ViZV9wb2RfbGFiZWxzfGt1YmVfcG9kX293bmVyfGt1YmVfcG9kX3N0YXR1c19waGFzZXxrdWJlX3JlcGxpY2FzZXRfb3duZXJ8a3ViZV9zdGF0ZWZ1bHNldF9yZXBsaWNhc3xrdWJlX3N0YXRlZnVsc2V0X3N0YXR1c19yZXBsaWNhc3xrdWJlY29zdF9jbHVzdGVyX2luZm98a3ViZWNvc3RfY2x1c3Rlcl9tYW5hZ2VtZW50X2Nvc3R8a3ViZWNvc3RfY2x1c3Rlcl9tZW1vcnlfd29ya2luZ19zZXRfYnl0ZXN8a3ViZWNvc3RfbG9hZF9iYWxhbmNlcl9jb3N0fGt1YmVjb3N0X25ldHdvcmtfaW50ZXJuZXRfZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya19yZWdpb25fZWdyZXNzX2Nvc3R8a3ViZWNvc3RfbmV0d29ya196b25lX2VncmVzc19jb3N0fGt1YmVjb3N0X25vZGVfaXNfc3BvdHxrdWJlY29zdF9wb2RfbmV0d29ya19lZ3Jlc3NfYnl0ZXNfdG90YWx8bm9kZV9jcHVfaG91cmx5X2Nvc3R8bm9kZV9jcHVfc2Vjb25kc190b3RhbHxub2RlX2Rpc2tfcmVhZHNfY29tcGxldGVkfG5vZGVfZGlza19yZWFkc19jb21wbGV0ZWRfdG90YWx8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWR8bm9kZV9kaXNrX3dyaXRlc19jb21wbGV0ZWRfdG90YWx8bm9kZV9maWxlc3lzdGVtX2RldmljZV9lcnJvcnxub2RlX2dwdV9jb3VudHxub2RlX2dwdV9ob3VybHlfY29zdHxub2RlX21lbW9yeV9CdWZmZXJzX2J5dGVzfG5vZGVfbWVtb3J5X0NhY2hlZF9ieXRlc3xub2RlX21lbW9yeV9NZW1BdmFpbGFibGVfYnl0ZXN8bm9kZV9tZW1vcnlfTWVtRnJlZV9ieXRlc3xub2RlX21lbW9yeV9NZW1Ub3RhbF9ieXRlc3xub2RlX25ldHdvcmtfdHJhbnNtaXRfYnl0ZXNfdG90YWx8bm9kZV9yYW1faG91cmx5X2Nvc3R8bm9kZV90b3RhbF9ob3VybHlfY29zdHxwb2RfcHZjX2FsbG9jYXRpb258cHZfaG91cmx5X2Nvc3R8c2VydmljZV9zZWxlY3Rvcl9sYWJlbHN8c3RhdGVmdWxTZXRfbWF0Y2hfbGFiZWxzfGt1YmVjb3N0X3B2X2luZm98dXApIiwic291cmNlX2xhYmVscyI6WyJfX25hbWVfXyJdfV0sInJlbGFiZWxfY29uZmlncyI6W3siYWN0aW9uIjoia2VlcCIsInJlZ2V4Ijp0cnVlLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjcmFwZSJdfSx7ImFjdGlvbiI6ImtlZXAiLCJyZWdleCI6IiguKm5vZGUtZXhwb3J0ZXJ8a3ViZWNvc3QtbmV0d29yay1jb3N0cykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX2VuZHBvaW50c19uYW1lIl19LHsiYWN0aW9uIjoicmVwbGFjZSIsInJlZ2V4IjoiKGh0dHBzPykiLCJzb3VyY2VfbGFiZWxzIjpbIl9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfYW5ub3RhdGlvbl9wcm9tZXRoZXVzX2lvX3NjaGVtZSJdLCJ0YXJnZXRfbGFiZWwiOiJfX3NjaGVtZV9fIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwicmVnZXgiOiIoLispIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX2Fubm90YXRpb25fcHJvbWV0aGV1c19pb19wYXRoIl0sInRhcmdldF9sYWJlbCI6Il9fbWV0cmljc19wYXRoX18ifSx7ImFjdGlvbiI6InJlcGxhY2UiLCJyZWdleCI6IihbXjpdKykoPzo6XFxkKyk/OyhcXGQrKSIsInJlcGxhY2VtZW50IjoiJDE6JDIiLCJzb3VyY2VfbGFiZWxzIjpbIl9fYWRkcmVzc19fIiwiX19tZXRhX2t1YmVybmV0ZXNfc2VydmljZV9hbm5vdGF0aW9uX3Byb21ldGhldXNfaW9fcG9ydCJdLCJ0YXJnZXRfbGFiZWwiOiJfX2FkZHJlc3NfXyJ9LHsiYWN0aW9uIjoibGFiZWxtYXAiLCJyZWdleCI6Il9fbWV0YV9rdWJlcm5ldGVzX3NlcnZpY2VfbGFiZWxfKC4rKSJ9LHsiYWN0aW9uIjoicmVwbGFjZSIsInNvdXJjZV9sYWJlbHMiOlsiX19tZXRhX2t1YmVybmV0ZXNfbmFtZXNwYWNlIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbmFtZXNwYWNlIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19zZXJ2aWNlX25hbWUiXSwidGFyZ2V0X2xhYmVsIjoia3ViZXJuZXRlc19uYW1lIn0seyJhY3Rpb24iOiJyZXBsYWNlIiwic291cmNlX2xhYmVscyI6WyJfX21ldGFfa3ViZXJuZXRlc19wb2Rfbm9kZV9uYW1lIl0sInRhcmdldF9sYWJlbCI6Imt1YmVybmV0ZXNfbm9kZSJ9XX1dfSwicmVjb3JkaW5nX3J1bGVzLnltbCI6e30sInJ1bGVzIjp7Imdyb3VwcyI6W3sibmFtZSI6IkNQVSIsInJ1bGVzIjpbeyJleHByIjoic3VtKHJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJcIn1bNW1dKSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZTpyYXRlNW0ifSx7ImV4cHIiOiJyYXRlKGNvbnRhaW5lcl9jcHVfdXNhZ2Vfc2Vjb25kc190b3RhbHtjb250YWluZXIhPVwiXCJ9WzVtXSkiLCJyZWNvcmQiOiJjbHVzdGVyOmNwdV91c2FnZV9ub3N1bTpyYXRlNW0ifSx7ImV4cHIiOiJhdmcoaXJhdGUoY29udGFpbmVyX2NwdV91c2FnZV9zZWNvbmRzX3RvdGFse2NvbnRhaW5lciE9XCJQT0RcIiwgY29udGFpbmVyIT1cIlwifVs1bV0pKSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX2NwdV91c2FnZV9pcmF0ZSJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSBieSAoY29udGFpbmVyLHBvZCxuYW1lc3BhY2UpIiwicmVjb3JkIjoia3ViZWNvc3RfY29udGFpbmVyX21lbW9yeV93b3JraW5nX3NldF9ieXRlcyJ9LHsiZXhwciI6InN1bShjb250YWluZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVze2NvbnRhaW5lciE9XCJQT0RcIixjb250YWluZXIhPVwiXCJ9KSIsInJlY29yZCI6Imt1YmVjb3N0X2NsdXN0ZXJfbWVtb3J5X3dvcmtpbmdfc2V0X2J5dGVzIn1dfSx7Im5hbWUiOiJTYXZpbmdzIiwicnVsZXMiOlt7ImV4cHIiOiJzdW0oYXZnKGt1YmVfcG9kX293bmVye293bmVyX2tpbmQhPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSIsImxhYmVscyI6eyJkYWVtb25zZXQiOiJmYWxzZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kPVwiRGFlbW9uU2V0XCJ9KSBieSAocG9kKSAqIHN1bShjb250YWluZXJfY3B1X2FsbG9jYXRpb24pIGJ5IChwb2QpKSAvIHN1bShrdWJlX25vZGVfaW5mbykiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoidHJ1ZSJ9LCJyZWNvcmQiOiJrdWJlY29zdF9zYXZpbmdzX2NwdV9hbGxvY2F0aW9uIn0seyJleHByIjoic3VtKGF2ZyhrdWJlX3BvZF9vd25lcntvd25lcl9raW5kIT1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkiLCJsYWJlbHMiOnsiZGFlbW9uc2V0IjoiZmFsc2UifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9LHsiZXhwciI6InN1bShhdmcoa3ViZV9wb2Rfb3duZXJ7b3duZXJfa2luZD1cIkRhZW1vblNldFwifSkgYnkgKHBvZCkgKiBzdW0oY29udGFpbmVyX21lbW9yeV9hbGxvY2F0aW9uX2J5dGVzKSBieSAocG9kKSkgLyBzdW0oa3ViZV9ub2RlX2luZm8pIiwibGFiZWxzIjp7ImRhZW1vbnNldCI6InRydWUifSwicmVjb3JkIjoia3ViZWNvc3Rfc2F2aW5nc19tZW1vcnlfYWxsb2NhdGlvbl9ieXRlcyJ9XX1dfX0sInNlcnZpY2VBY2NvdW50cyI6eyJhbGVydG1hbmFnZXIiOnsiY3JlYXRlIjp0cnVlfSwibm9kZUV4cG9ydGVyIjp7ImNyZWF0ZSI6dHJ1ZX0sInNlcnZlciI6eyJhbm5vdGF0aW9ucyI6e30sImNyZWF0ZSI6dHJ1ZX19fSwicHJvbWV0aGV1c1J1bGUiOnsiYWRkaXRpb25hbExhYmVscyI6e30sImVuYWJsZWQiOnRydWV9LCJyZXBvcnRpbmciOnsiZXJyb3JSZXBvcnRpbmciOnRydWUsImxvZ0NvbGxlY3Rpb24iOnRydWUsInByb2R1Y3RBbmFseXRpY3MiOnRydWUsInZhbHVlc1JlcG9ydGluZyI6dHJ1ZX0sInNlcnZpY2UiOnsiYW5ub3RhdGlvbnMiOnt9LCJsYWJlbHMiOnt9LCJub2RlUG9ydCI6e30sInBvcnQiOjkwOTAsInRhcmdldFBvcnQiOjkwOTAsInR5cGUiOiJDbHVzdGVySVAifSwic2VydmljZUFjY291bnQiOnsiYW5ub3RhdGlvbnMiOnt9LCJjcmVhdGUiOnRydWV9LCJzZXJ2aWNlTW9uaXRvciI6eyJhZGRpdGlvbmFsTGFiZWxzIjp7fSwiZW5hYmxlZCI6dHJ1ZSwiaW50ZXJ2YWwiOiIxbSIsIm1ldHJpY1JlbGFiZWxpbmdzIjpbXSwibmV0d29ya0Nvc3RzIjp7ImFkZGl0aW9uYWxMYWJlbHMiOnt9LCJlbmFibGVkIjp0cnVlLCJpbnRlcnZhbCI6IjFtIiwibWV0cmljUmVsYWJlbGluZ3MiOltdLCJyZWxhYmVsaW5ncyI6W10sInNjcmFwZVRpbWVvdXQiOiIxMHMifSwicmVsYWJlbGluZ3MiOltdLCJzY3JhcGVUaW1lb3V0IjoiMTBzIn0sInNpZ1Y0UHJveHkiOnsiaG9zdCI6ImFwcy13b3Jrc3BhY2VzLnVzLXdlc3QtMi5hbWF6b25hd3MuY29tIiwiaW1hZ2UiOiJwdWJsaWMuZWNyLmF3cy9hd3Mtb2JzZXJ2YWJpbGl0eS9hd3Mtc2lndjQtcHJveHk6bGF0ZXN0IiwiaW1hZ2VQdWxsUG9saWN5IjoiSWZOb3RQcmVzZW50IiwibmFtZSI6ImFwcyIsInBvcnQiOjgwMDUsInJlZ2lvbiI6InVzLXdlc3QtMiIsInJlc291cmNlcyI6e319LCJzdXBwb3J0TkZTIjpmYWxzZSwidG9sZXJhdGlvbnMiOltdLCJ0b3BvbG9neVNwcmVhZENvbnN0cmFpbnRzIjpbXSwidXBncmFkZSI6eyJ0b1YyIjpmYWxzZX19
             - name: READ_ONLY
               value: "false"
             - name: PROMETHEUS_SERVER_ENDPOINT
               valueFrom:
@@ -113,16 +118,8 @@
             - name: DB_PATH
               value: /var/db/
             - name: CLUSTER_PROFILE
               value: development
-            - name: EMIT_POD_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_NAMESPACE_ANNOTATIONS_METRIC
-              value: "false"
-            - name: EMIT_KSM_V1_METRICS
-              value: "true"
-            - name: EMIT_KSM_V1_METRICS_ONLY # ONLY emit KSM v1 metrics that do not exist in KSM 2 by default
-              value: "false"
             - name: LOG_COLLECTION_ENABLED
               value: "true"
             - name: PRODUCT_ANALYTICS_ENABLED
               value: "true"
@@ -131,32 +128,18 @@
             - name: VALUES_REPORTING_ENABLED
               value: "true"
             - name: SENTRY_DSN
               value: "https://[email protected]/5245431"
-            - name: LEGACY_EXTERNAL_API_DISABLED
-              value: "false"
-            - name: CACHE_WARMING_ENABLED
-              value: "false"
-            - name: SAVINGS_ENABLED
-              value: "true"
             - name: ETL_RESOLUTION_SECONDS
               value: "300"
             - name: ETL_MAX_PROMETHEUS_QUERY_DURATION_MINUTES
               value: "1440"
             - name: ETL_DAILY_STORE_DURATION_DAYS
               value: "91"
             - name: ETL_HOURLY_STORE_DURATION_HOURS
               value: "49"
-            - name: ETL_FILE_STORE_ENABLED
-              value: "true"
-            - name: ETL_ASSET_RECONCILIATION_ENABLED
-              value: "true"
             - name: CONTAINER_STATS_ENABLED
               value: "true"
-            - name: RECONCILE_NETWORK
-              value: "true"
-            - name: KUBECOST_METRICS_POD_ENABLED
-              value: "false"
             - name: PV_ENABLED
               value: "true"
             - name: MAX_QUERY_CONCURRENCY
               value: "5"
@@ -190,9 +173,9 @@
             - name: WATERFOWL_ENABLED
               value: "true"
             - name: DIAGNOSTICS_RUN_IN_COST_MODEL
               value: "false"
-        - image: gcr.io/kubecost1/frontend:prod-2.4.3
+        - image: gcr.io/kubecost1/frontend:prod-2.5.1
           env:
             - name: GET_HOSTS_FROM
               value: dns
           name: cost-analyzer-frontend
@@ -240,9 +223,9 @@
               drop:
               - ALL
             privileged: false
             readOnlyRootFilesystem: true
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           readinessProbe:
             httpGet:
               path: /healthz
               port: 9004
@@ -294,9 +277,9 @@
             - name: GRAFANA_ENABLED
               value: "false"
         
         - name: cloud-cost
-          image: gcr.io/kubecost1/cost-model:prod-2.4.3
+          image: gcr.io/kubecost1/cost-model:prod-2.5.1
           
           readinessProbe:
             httpGet:
               path: /healthz
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-frontend-config-map-template.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: nginx-conf
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
@@ -82,9 +81,9 @@
         add_header Cache-Control "max-age=300";
         location / {
             try_files $uri $uri/ /index.html;
         }
-        add_header ETag "2.4.3";
+        add_header ETag "2.5.1";
         listen 9090;
         listen [::]:9090;
         location /api/ {
             proxy_pass http://api/;
@@ -262,8 +261,32 @@
             proxy_set_header Connection "";
             proxy_set_header  X-Real-IP  $remote_addr;
             proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
         }
+        location ~* /model/savings/gpuContainersDetails(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuContainersDetails$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuWorkloadUtilization(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuWorkloadUtilization$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
+        location ~* /model/savings/gpuRecommendation(.*) {
+            proxy_read_timeout          300;
+            proxy_pass http://aggregator/savings/gpuRecommendation$1$is_args$args;
+            proxy_redirect off;
+            proxy_set_header Connection "";
+            proxy_set_header  X-Real-IP  $remote_addr;
+            proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for;
+        }
         location = /model/cloudCost {
             proxy_read_timeout          300;
             proxy_pass http://aggregator/cloudCost;
             proxy_redirect off;
@@ -1106,9 +1129,9 @@
                 "pluginsEnabled": "false",
                 "carbonEstimatesEnabled": "false",
                 "clusterControllerEnabled": "false",
                 "forecastingEnabled": "true",
-                "chartVersion": "2.4.3",
+                "chartVersion": "2.5.1",
                 "hourlyDataRetention": "49",
                 "dailyDataRetention": "91",
                 "hideDiagnostics": "false",
                 "hideOrphanedResources": "false",
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2025-01-01 13:53:31.100712005 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-ingress-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
   annotations:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-config-map-template.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: network-costs-config
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-service-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -7,9 +7,9 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
 spec:
   clusterIP: None
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-network-costs-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -7,23 +7,25 @@
   namespace: default
   labels:
     app.kubernetes.io/instance: kubecost
     app.kubernetes.io/name: network-costs
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app: release-name-network-costs
+  annotations:
 spec:
   updateStrategy:
     type: RollingUpdate
   selector:
     matchLabels:
       app: release-name-network-costs
   template:
     metadata:
+      annotations:
       labels:
         app.kubernetes.io/instance: kubecost
         app.kubernetes.io/name: network-costs
-        helm.sh/chart: cost-analyzer-2.4.3
+        helm.sh/chart: cost-analyzer-2.5.1
         app.kubernetes.io/managed-by: Helm
         app: release-name-network-costs
     spec:
       hostNetwork: true
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pricing-configmap.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: pricing-configs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2025-01-01 13:53:31.100712005 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-prometheusrule-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-pvc-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-server-configmap.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -4,11 +4,11 @@
 kind: ConfigMap
 metadata:
   name: app-configs
   namespace: default
-  labels: 
+  labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-account-template.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -5,10 +5,9 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-service-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -6,9 +6,9 @@
   name: release-name-cost-analyzer
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2025-01-01 13:53:31.100712005 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-servicemonitor-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-cost-analyzer
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
@@ -24,8 +23,7 @@
     matchNames:
       - default
   selector:
     matchLabels:
-      
       app.kubernetes.io/name: cost-analyzer
       app.kubernetes.io/instance: release-name
       app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/cost-analyzer-smtp-configmap.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -6,8 +6,8 @@
   name: smtp-configs
   namespace: default
   labels:
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2025-01-01 13:53:31.097711968 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/external-grafana-config-map-template.yaml	2025-01-01 13:53:03.564369811 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: external-grafana-config-map
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 data:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2025-01-01 13:53:31.100712005 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-deployment.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,13 +5,14 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
+  annotations:
 spec:
   replicas: 1
   selector:
     matchLabels:
@@ -38,9 +39,9 @@
           type: RuntimeDefault
       restartPolicy: Always
       containers:
         - name: forecasting
-          image: gcr.io/kubecost1/kubecost-modeling:v0.1.16
+          image: gcr.io/kubecost1/kubecost-modeling:v0.1.18
           volumeMounts:
             - name: tmp
               mountPath: /tmp
           securityContext:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2025-01-01 13:53:31.099711993 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/forecasting-service.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,9 +5,9 @@
 metadata:
   name: release-name-forecasting
   namespace: default
   labels:
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/managed-by: Helm
     app.kubernetes.io/name: forecasting
     app.kubernetes.io/instance: release-name
     app: forecasting
Only in out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-attached-disks.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-cluster-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-deployment-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-kubernetes-resource-efficiency-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-label-cost-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-namespace-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-cloud-sevices.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-network-costs.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-node-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-multi-cluster.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-pod-utilization-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-prometheus-metrics-template.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-aggregator.yaml
Only in out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates: grafana-dashboard-workload-metrics.yaml
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2025-01-01 13:53:31.100712005 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/network-costs-servicemonitor-template.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -5,11 +5,10 @@
 metadata:
   name: release-name-network-costs
   namespace: default
   labels:
-    
     app.kubernetes.io/name: cost-analyzer
-    helm.sh/chart: cost-analyzer-2.4.3
+    helm.sh/chart: cost-analyzer-2.5.1
     app.kubernetes.io/instance: release-name
     app.kubernetes.io/managed-by: Helm
     app: cost-analyzer
 spec:
diff -U 4 -r out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml
--- out/target/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2025-01-01 13:53:31.100712005 +0000
+++ out/pr/kubecost/values-uibklab.yaml/sx-kubecost/charts/cost-analyzer/templates/tests/basic-health.yaml	2025-01-01 13:53:03.566369836 +0000
@@ -26,9 +26,9 @@
     image: alpine/k8s:1.26.9
     securityContext:
       privileged: false
       capabilities:
-        drop: 
+        drop:
         - ALL
       allowPrivilegeEscalation: false
       readOnlyRootFilesystem: true
     command:
@@ -42,8 +42,8 @@
         code=$(echo ${response} | jq .code);
         if [ "$code" -eq 200 ]; then
           echo "Got Kubecost working configuration. Successful."
           exit 0
-        else 
+        else
           echo "Failed to fetch Kubecost configuration. Response was $response"
           exit 1
         fi

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant