diff --git a/app/Http/Middleware/TrustHosts.php b/app/Http/Middleware/TrustHosts.php index c2a2cb41a..f0b9d67f2 100644 --- a/app/Http/Middleware/TrustHosts.php +++ b/app/Http/Middleware/TrustHosts.php @@ -4,11 +4,42 @@ use App\Models\InstanceSettings; use Illuminate\Http\Middleware\TrustHosts as Middleware; +use Illuminate\Http\Request; use Illuminate\Support\Facades\Cache; use Spatie\Url\Url; class TrustHosts extends Middleware { + /** + * Handle the incoming request. + * + * Skip host validation for certain routes: + * - Terminal auth routes (called by realtime container) + * - API routes (use token-based authentication, not host validation) + * - Webhook endpoints (use cryptographic signature validation) + */ + public function handle(Request $request, $next) + { + // Skip host validation for these routes + if ($request->is( + 'terminal/auth', + 'terminal/auth/ips', + 'api/*', + 'webhooks/*' + )) { + return $next($request); + } + + // Skip host validation if no FQDN is configured (initial setup) + $fqdnHost = Cache::get('instance_settings_fqdn_host'); + if ($fqdnHost === '' || $fqdnHost === null) { + return $next($request); + } + + // For all other routes, use parent's host validation + return parent::handle($request, $next); + } + /** * Get the host patterns that should be trusted. * @@ -44,6 +75,19 @@ public function hosts(): array $trustedHosts[] = $fqdnHost; } + // Trust the APP_URL host itself (not just subdomains) + $appUrl = config('app.url'); + if ($appUrl) { + try { + $appUrlHost = parse_url($appUrl, PHP_URL_HOST); + if ($appUrlHost && ! in_array($appUrlHost, $trustedHosts, true)) { + $trustedHosts[] = $appUrlHost; + } + } catch (\Exception $e) { + // Ignore parse errors + } + } + // Trust all subdomains of APP_URL as fallback $trustedHosts[] = $this->allSubdomainsOfApplicationUrl(); diff --git a/app/Jobs/ApplicationDeploymentJob.php b/app/Jobs/ApplicationDeploymentJob.php index a624348c0..41de17b05 100644 --- a/app/Jobs/ApplicationDeploymentJob.php +++ b/app/Jobs/ApplicationDeploymentJob.php @@ -517,6 +517,10 @@ private function deploy_dockerimage_buildpack() $this->generate_image_names(); $this->prepare_builder_image(); $this->generate_compose_file(); + + // Save runtime environment variables (including empty .env file if no variables defined) + $this->save_runtime_environment_variables(); + $this->rolling_update(); } @@ -1222,9 +1226,9 @@ private function save_runtime_environment_variables() // Handle empty environment variables if ($environment_variables->isEmpty()) { - // For Docker Compose, we need to create an empty .env file + // For Docker Compose and Docker Image, we need to create an empty .env file // because we always reference it in the compose file - if ($this->build_pack === 'dockercompose') { + if ($this->build_pack === 'dockercompose' || $this->build_pack === 'dockerimage') { $this->application_deployment_queue->addLogEntry('Creating empty .env file (no environment variables defined).'); // Create empty .env file diff --git a/app/Livewire/Project/Service/EditDomain.php b/app/Livewire/Project/Service/EditDomain.php index 43d885238..f759dd71e 100644 --- a/app/Livewire/Project/Service/EditDomain.php +++ b/app/Livewire/Project/Service/EditDomain.php @@ -83,7 +83,7 @@ public function submit() $this->validate(); $this->application->save(); $this->application->refresh(); - $this->syncData(false); + $this->syncFromModel(); updateCompose($this->application); if (str($this->application->fqdn)->contains(',')) { $this->dispatch('warning', 'Some services do not support multiple domains, which can lead to problems and is NOT RECOMMENDED.

Only use multiple domains if you know what you are doing.'); @@ -96,7 +96,7 @@ public function submit() $originalFqdn = $this->application->getOriginal('fqdn'); if ($originalFqdn !== $this->application->fqdn) { $this->application->fqdn = $originalFqdn; - $this->syncData(false); + $this->syncFromModel(); } return handleError($e, $this); diff --git a/app/Models/Application.php b/app/Models/Application.php index 9554d71a7..99fbded86 100644 --- a/app/Models/Application.php +++ b/app/Models/Application.php @@ -1804,7 +1804,9 @@ public function getFilesFromServer(bool $isInit = false) public function parseHealthcheckFromDockerfile($dockerfile, bool $isInit = false) { $dockerfile = str($dockerfile)->trim()->explode("\n"); - if (str($dockerfile)->contains('HEALTHCHECK') && ($this->isHealthcheckDisabled() || $isInit)) { + $hasHealthcheck = str($dockerfile)->contains('HEALTHCHECK'); + + if ($hasHealthcheck && ($this->isHealthcheckDisabled() || $isInit)) { $healthcheckCommand = null; $lines = $dockerfile->toArray(); foreach ($lines as $line) { @@ -1845,6 +1847,14 @@ public function parseHealthcheckFromDockerfile($dockerfile, bool $isInit = false $this->save(); } } + } elseif (! $hasHealthcheck && $this->custom_healthcheck_found) { + // HEALTHCHECK was removed from Dockerfile, reset to defaults + $this->custom_healthcheck_found = false; + $this->health_check_interval = 5; + $this->health_check_timeout = 5; + $this->health_check_retries = 10; + $this->health_check_start_period = 5; + $this->save(); } } diff --git a/config/constants.php b/config/constants.php index 1fc1af3f3..813594e61 100644 --- a/config/constants.php +++ b/config/constants.php @@ -2,7 +2,7 @@ return [ 'coolify' => [ - 'version' => '4.0.0-beta.436', + 'version' => '4.0.0-beta.438', 'helper_version' => '1.0.11', 'realtime_version' => '1.0.10', 'self_hosted' => env('SELF_HOSTED', true), diff --git a/openapi.json b/openapi.json index 3667cbe87..dd3c6783a 100644 --- a/openapi.json +++ b/openapi.json @@ -3356,6 +3356,137 @@ "bearerAuth": [] } ] + }, + "post": { + "tags": [ + "Databases" + ], + "summary": "Create Backup", + "description": "Create a new scheduled backup configuration for a database", + "operationId": "create-database-backup", + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "UUID of the database.", + "required": true, + "schema": { + "type": "string", + "format": "uuid" + } + } + ], + "requestBody": { + "description": "Backup configuration data", + "required": true, + "content": { + "application\/json": { + "schema": { + "required": [ + "frequency" + ], + "properties": { + "frequency": { + "type": "string", + "description": "Backup frequency (cron expression or: every_minute, hourly, daily, weekly, monthly, yearly)" + }, + "enabled": { + "type": "boolean", + "description": "Whether the backup is enabled", + "default": true + }, + "save_s3": { + "type": "boolean", + "description": "Whether to save backups to S3", + "default": false + }, + "s3_storage_uuid": { + "type": "string", + "description": "S3 storage UUID (required if save_s3 is true)" + }, + "databases_to_backup": { + "type": "string", + "description": "Comma separated list of databases to backup" + }, + "dump_all": { + "type": "boolean", + "description": "Whether to dump all databases", + "default": false + }, + "backup_now": { + "type": "boolean", + "description": "Whether to trigger backup immediately after creation" + }, + "database_backup_retention_amount_locally": { + "type": "integer", + "description": "Number of backups to retain locally" + }, + "database_backup_retention_days_locally": { + "type": "integer", + "description": "Number of days to retain backups locally" + }, + "database_backup_retention_max_storage_locally": { + "type": "integer", + "description": "Max storage (MB) for local backups" + }, + "database_backup_retention_amount_s3": { + "type": "integer", + "description": "Number of backups to retain in S3" + }, + "database_backup_retention_days_s3": { + "type": "integer", + "description": "Number of days to retain backups in S3" + }, + "database_backup_retention_max_storage_s3": { + "type": "integer", + "description": "Max storage (MB) for S3 backups" + } + }, + "type": "object" + } + } + } + }, + "responses": { + "201": { + "description": "Backup configuration created successfully", + "content": { + "application\/json": { + "schema": { + "properties": { + "uuid": { + "type": "string", + "format": "uuid", + "example": "550e8400-e29b-41d4-a716-446655440000" + }, + "message": { + "type": "string", + "example": "Backup configuration created successfully." + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#\/components\/responses\/401" + }, + "400": { + "$ref": "#\/components\/responses\/400" + }, + "404": { + "$ref": "#\/components\/responses\/404" + }, + "422": { + "$ref": "#\/components\/responses\/422" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] } }, "\/databases\/{uuid}": { @@ -5381,6 +5512,96 @@ ] } }, + "\/deployments\/{uuid}\/cancel": { + "post": { + "tags": [ + "Deployments" + ], + "summary": "Cancel", + "description": "Cancel a deployment by UUID.", + "operationId": "cancel-deployment-by-uuid", + "parameters": [ + { + "name": "uuid", + "in": "path", + "description": "Deployment UUID", + "required": true, + "schema": { + "type": "string" + } + } + ], + "responses": { + "200": { + "description": "Deployment cancelled successfully.", + "content": { + "application\/json": { + "schema": { + "properties": { + "message": { + "type": "string", + "example": "Deployment cancelled successfully." + }, + "deployment_uuid": { + "type": "string", + "example": "cm37r6cqj000008jm0veg5tkm" + }, + "status": { + "type": "string", + "example": "cancelled-by-user" + } + }, + "type": "object" + } + } + } + }, + "400": { + "description": "Deployment cannot be cancelled (already finished\/failed\/cancelled).", + "content": { + "application\/json": { + "schema": { + "properties": { + "message": { + "type": "string", + "example": "Deployment cannot be cancelled. Current status: finished" + } + }, + "type": "object" + } + } + } + }, + "401": { + "$ref": "#\/components\/responses\/401" + }, + "403": { + "description": "User doesn't have permission to cancel this deployment.", + "content": { + "application\/json": { + "schema": { + "properties": { + "message": { + "type": "string", + "example": "You do not have permission to cancel this deployment." + } + }, + "type": "object" + } + } + } + }, + "404": { + "$ref": "#\/components\/responses\/404" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + } + }, "\/deploy": { "get": { "tags": [ @@ -5538,6 +5759,91 @@ } }, "\/github-apps": { + "get": { + "tags": [ + "GitHub Apps" + ], + "summary": "List", + "description": "List all GitHub apps.", + "operationId": "list-github-apps", + "responses": { + "200": { + "description": "List of GitHub apps.", + "content": { + "application\/json": { + "schema": { + "type": "array", + "items": { + "properties": { + "id": { + "type": "integer" + }, + "uuid": { + "type": "string" + }, + "name": { + "type": "string" + }, + "organization": { + "type": "string", + "nullable": true + }, + "api_url": { + "type": "string" + }, + "html_url": { + "type": "string" + }, + "custom_user": { + "type": "string" + }, + "custom_port": { + "type": "integer" + }, + "app_id": { + "type": "integer" + }, + "installation_id": { + "type": "integer" + }, + "client_id": { + "type": "string" + }, + "private_key_id": { + "type": "integer" + }, + "is_system_wide": { + "type": "boolean" + }, + "is_public": { + "type": "boolean" + }, + "team_id": { + "type": "integer" + }, + "type": { + "type": "string" + } + }, + "type": "object" + } + } + } + } + }, + "401": { + "$ref": "#\/components\/responses\/401" + }, + "400": { + "$ref": "#\/components\/responses\/400" + } + }, + "security": [ + { + "bearerAuth": [] + } + ] + }, "post": { "tags": [ "GitHub Apps" diff --git a/openapi.yaml b/openapi.yaml index b7df65567..754b7ec6f 100644 --- a/openapi.yaml +++ b/openapi.yaml @@ -2130,6 +2130,94 @@ paths: security: - bearerAuth: [] + post: + tags: + - Databases + summary: 'Create Backup' + description: 'Create a new scheduled backup configuration for a database' + operationId: create-database-backup + parameters: + - + name: uuid + in: path + description: 'UUID of the database.' + required: true + schema: + type: string + format: uuid + requestBody: + description: 'Backup configuration data' + required: true + content: + application/json: + schema: + required: + - frequency + properties: + frequency: + type: string + description: 'Backup frequency (cron expression or: every_minute, hourly, daily, weekly, monthly, yearly)' + enabled: + type: boolean + description: 'Whether the backup is enabled' + default: true + save_s3: + type: boolean + description: 'Whether to save backups to S3' + default: false + s3_storage_uuid: + type: string + description: 'S3 storage UUID (required if save_s3 is true)' + databases_to_backup: + type: string + description: 'Comma separated list of databases to backup' + dump_all: + type: boolean + description: 'Whether to dump all databases' + default: false + backup_now: + type: boolean + description: 'Whether to trigger backup immediately after creation' + database_backup_retention_amount_locally: + type: integer + description: 'Number of backups to retain locally' + database_backup_retention_days_locally: + type: integer + description: 'Number of days to retain backups locally' + database_backup_retention_max_storage_locally: + type: integer + description: 'Max storage (MB) for local backups' + database_backup_retention_amount_s3: + type: integer + description: 'Number of backups to retain in S3' + database_backup_retention_days_s3: + type: integer + description: 'Number of days to retain backups in S3' + database_backup_retention_max_storage_s3: + type: integer + description: 'Max storage (MB) for S3 backups' + type: object + responses: + '201': + description: 'Backup configuration created successfully' + content: + application/json: + schema: + properties: + uuid: { type: string, format: uuid, example: 550e8400-e29b-41d4-a716-446655440000 } + message: { type: string, example: 'Backup configuration created successfully.' } + type: object + '401': + $ref: '#/components/responses/401' + '400': + $ref: '#/components/responses/400' + '404': + $ref: '#/components/responses/404' + '422': + $ref: '#/components/responses/422' + security: + - + bearerAuth: [] '/databases/{uuid}': get: tags: @@ -3532,6 +3620,55 @@ paths: security: - bearerAuth: [] + '/deployments/{uuid}/cancel': + post: + tags: + - Deployments + summary: Cancel + description: 'Cancel a deployment by UUID.' + operationId: cancel-deployment-by-uuid + parameters: + - + name: uuid + in: path + description: 'Deployment UUID' + required: true + schema: + type: string + responses: + '200': + description: 'Deployment cancelled successfully.' + content: + application/json: + schema: + properties: + message: { type: string, example: 'Deployment cancelled successfully.' } + deployment_uuid: { type: string, example: cm37r6cqj000008jm0veg5tkm } + status: { type: string, example: cancelled-by-user } + type: object + '400': + description: 'Deployment cannot be cancelled (already finished/failed/cancelled).' + content: + application/json: + schema: + properties: + message: { type: string, example: 'Deployment cannot be cancelled. Current status: finished' } + type: object + '401': + $ref: '#/components/responses/401' + '403': + description: "User doesn't have permission to cancel this deployment." + content: + application/json: + schema: + properties: + message: { type: string, example: 'You do not have permission to cancel this deployment.' } + type: object + '404': + $ref: '#/components/responses/404' + security: + - + bearerAuth: [] /deploy: get: tags: @@ -3631,6 +3768,29 @@ paths: - bearerAuth: [] /github-apps: + get: + tags: + - 'GitHub Apps' + summary: List + description: 'List all GitHub apps.' + operationId: list-github-apps + responses: + '200': + description: 'List of GitHub apps.' + content: + application/json: + schema: + type: array + items: + properties: { id: { type: integer }, uuid: { type: string }, name: { type: string }, organization: { type: string, nullable: true }, api_url: { type: string }, html_url: { type: string }, custom_user: { type: string }, custom_port: { type: integer }, app_id: { type: integer }, installation_id: { type: integer }, client_id: { type: string }, private_key_id: { type: integer }, is_system_wide: { type: boolean }, is_public: { type: boolean }, team_id: { type: integer }, type: { type: string } } + type: object + '401': + $ref: '#/components/responses/401' + '400': + $ref: '#/components/responses/400' + security: + - + bearerAuth: [] post: tags: - 'GitHub Apps' diff --git a/resources/css/utilities.css b/resources/css/utilities.css index 0bced1ece..f819280d5 100644 --- a/resources/css/utilities.css +++ b/resources/css/utilities.css @@ -60,6 +60,15 @@ @utility select { @apply w-full; @apply input-select; @apply focus-visible:outline-none focus-visible:border-l-4 focus-visible:border-l-coollabs dark:focus-visible:border-l-warning; + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23000000'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9'/%3e%3c/svg%3e"); + background-position: right 0.5rem center; + background-repeat: no-repeat; + background-size: 1rem 1rem; + padding-right: 2.5rem; + + &:where(.dark, .dark *) { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 24 24' stroke-width='1.5' stroke='%23ffffff'%3e%3cpath stroke-linecap='round' stroke-linejoin='round' d='M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9'/%3e%3c/svg%3e"); + } } @utility button { diff --git a/resources/views/layouts/app.blade.php b/resources/views/layouts/app.blade.php index 55fb417f5..a1ff81e84 100644 --- a/resources/views/layouts/app.blade.php +++ b/resources/views/layouts/app.blade.php @@ -45,7 +45,7 @@ -
+
Coolify
diff --git a/resources/views/livewire/settings-dropdown.blade.php b/resources/views/livewire/settings-dropdown.blade.php index befa151d8..4072cd240 100644 --- a/resources/views/livewire/settings-dropdown.blade.php +++ b/resources/views/livewire/settings-dropdown.blade.php @@ -99,13 +99,11 @@
\ No newline at end of file diff --git a/templates/compose/minio.yaml b/templates/compose/minio.yaml index a9de73f2c..d4d43395b 100644 --- a/templates/compose/minio.yaml +++ b/templates/compose/minio.yaml @@ -1,3 +1,4 @@ +# ignore: true # documentation: https://min.io/docs/minio/container/index.html # slogan: MinIO is a high performance object storage server compatible with Amazon S3 APIs. # category: storage diff --git a/templates/service-templates-latest.json b/templates/service-templates-latest.json index 89f5819b5..60e289870 100644 --- a/templates/service-templates-latest.json +++ b/templates/service-templates-latest.json @@ -350,6 +350,23 @@ "minversion": "0.0.0", "port": "8083" }, + "cap": { + "documentation": "https://cap.so?utm_source=coolify.io", + "slogan": "Cap is the open source alternative to Loom. Lightweight, powerful, and cross-platform. Record and share in seconds.", + "compose": "c2VydmljZXM6CiAgY2FwLXdlYjoKICAgIGltYWdlOiAnZ2hjci5pby9jYXBzb2Z0d2FyZS9jYXAtd2ViOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX0NBUF8zMDAwCiAgICAgIC0gJ0RBVEFCQVNFX1VSTD1teXNxbDovLyRTRVJWSUNFX1VTRVJfTVlTUUw6JFNFUlZJQ0VfUEFTU1dPUkRfTVlTUUxAY2FwLWRiOjMzMDYvJHtNWVNRTF9EQVRBQkFTRTotcGxhbmV0c2NhbGV9JwogICAgICAtICdXRUJfVVJMPSR7U0VSVklDRV9VUkxfQ0FQfScKICAgICAgLSAnTkVYVEFVVEhfVVJMPSR7U0VSVklDRV9VUkxfQ0FQfScKICAgICAgLSAnREFUQUJBU0VfRU5DUllQVElPTl9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X0RBVEFCQVNFRU5DUllQVElPTktFWX0nCiAgICAgIC0gJ05FWFRBVVRIX1NFQ1JFVD0ke1NFUlZJQ0VfUEFTU1dPUkRfNjRfTkVYVEFVVEhTRUNSRVR9JwogICAgICAtICdDQVBfQVdTX0FDQ0VTU19LRVk9JHtDQVBfQVdTX0FDQ0VTU19LRVk6P30nCiAgICAgIC0gJ0NBUF9BV1NfU0VDUkVUX0tFWT0ke0NBUF9BV1NfU0VDUkVUX0tFWTo/fScKICAgICAgLSAnQ0FQX0FXU19CVUNLRVQ9JHtDQVBfQVdTX0JVQ0tFVDo/fScKICAgICAgLSAnQ0FQX0FXU19SRUdJT049JHtDQVBfQVdTX1JFR0lPTjo/fScKICAgICAgLSAnUzNfUFVCTElDX0VORFBPSU5UPSR7UzNfUFVCTElDX0VORFBPSU5UOj99JwogICAgICAtICdTM19JTlRFUk5BTF9FTkRQT0lOVD0ke1MzX0lOVEVSTkFMX0VORFBPSU5UOj99JwogICAgICAtIE5FWFRfUlVOVElNRT1ub2RlanMKICAgICAgLSAnUzNfUEFUSF9TVFlMRT0ke1MzX1BBVEhfU1RZTEU6LXRydWV9JwogICAgICAtICdDQVBfQVdTX0VORFBPSU5UPSR7Q0FQX0FXU19FTkRQT0lOVDo/fScKICAgIGRlcGVuZHNfb246CiAgICAgIGNhcC1kYjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogIGNhcC1kYjoKICAgIGltYWdlOiAnbXlzcWw6OC4wJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFOi1wbGFuZXRzY2FsZX0nCiAgICAgIC0gJ01ZU1FMX1JPT1RfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMUk9PVH0nCiAgICAgIC0gJ01ZU1FMX0FMTE9XX0VNUFRZX1BBU1NXT1JEPSR7TVlTUUxfQUxMT1dfRU1QVFlfUEFTU1dPUkQ6LXllc30nCiAgICBjb21tYW5kOgogICAgICAtICctLW1heF9jb25uZWN0aW9ucz0xMDAwJwogICAgICAtICctLWRlZmF1bHQtYXV0aGVudGljYXRpb24tcGx1Z2luPW15c3FsX25hdGl2ZV9wYXNzd29yZCcKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSAxMjcuMC4wLjEKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogNQogICAgdm9sdW1lczoKICAgICAgLSAnY2FwX2RiOi92YXIvbGliL215c3FsJwo=", + "tags": [ + "cap", + "loom", + "open", + "source", + "low", + "code" + ], + "category": null, + "logo": "svgs/cap.svg", + "minversion": "0.0.0", + "port": "5679" + }, "castopod": { "documentation": "https://docs.castopod.org/main/en/?utm_source=coolify.io", "slogan": "Castopod is a free & open-source hosting platform made for podcasters who want engage and interact with their audience.", @@ -973,7 +990,7 @@ "ente-photos-with-s3": { "documentation": "https://help.ente.io/self-hosting/installation/compose?utm_source=coolify.io", "slogan": "Ente Photos is a fully open source, End to End Encrypted alternative to Google Photos and Apple Photos.", - "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOjYxM2M2YTk2MzkwZDdhNjI0Y2YzMGI5NDY5NTU3MDVkNjMyNDIzY2MnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9NVVNFVU1fODA4MAogICAgICAtIEVOVEVfREJfSE9TVD1wb3N0Z3JlcwogICAgICAtIEVOVEVfREJfUE9SVD01NDMyCiAgICAgIC0gJ0VOVEVfREJfTkFNRT0ke1BPU1RHUkVTX0RCOi1lbnRlX2RifScKICAgICAgLSAnRU5URV9EQl9VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfScKICAgICAgLSAnRU5URV9EQl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9JwogICAgICAtICdFTlRFX0hUVFBfVVNFX1RMUz0ke0VOVEVfSFRUUF9VU0VfVExTOi1mYWxzZX0nCiAgICAgIC0gRU5URV9TM19BUkVfTE9DQUxfQlVDS0VUUz1mYWxzZQogICAgICAtIEVOVEVfUzNfVVNFX1BBVEhfU1RZTEVfVVJMUz10cnVlCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX0tFWT0ke1NFUlZJQ0VfVVNFUl9NSU5JT30nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1NFQ1JFVD0ke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9FTkRQT0lOVD0ke1NFUlZJQ0VfRlFETl9NSU5JT185MDAwfScKICAgICAgLSBFTlRFX1MzX0IyX0VVX0NFTl9SRUdJT049ZXUtY2VudHJhbC0yCiAgICAgIC0gRU5URV9TM19CMl9FVV9DRU5fQlVDS0VUPWIyLWV1LWNlbgogICAgICAtICdFTlRFX0tFWV9FTkNSWVBUSU9OPSR7U0VSVklDRV9SRUFMQkFTRTY0X0VOQ1JZUFRJT059JwogICAgICAtICdFTlRFX0tFWV9IQVNIPSR7U0VSVklDRV9SRUFMQkFTRTY0XzY0X0hBU0h9JwogICAgICAtICdFTlRFX0pXVF9TRUNSRVQ9JHtTRVJWSUNFX1JFQUxCQVNFNjRfSldUfScKICAgICAgLSAnRU5URV9JTlRFUk5BTF9BRE1JTj0ke0VOVEVfSU5URVJOQUxfQURNSU46LTE1ODA1NTk5NjIzODY0Mzh9JwogICAgICAtICdFTlRFX0lOVEVSTkFMX0RJU0FCTEVfUkVHSVNUUkFUSU9OPSR7RU5URV9JTlRFUk5BTF9ESVNBQkxFX1JFR0lTVFJBVElPTjotZmFsc2V9JwogICAgdm9sdW1lczoKICAgICAgLSAnbXVzZXVtLWRhdGE6L2RhdGEnCiAgICAgIC0gJ211c2V1bS1jb25maWc6L2NvbmZpZycKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIG1pbmlvOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gd2dldAogICAgICAgIC0gJy0tc3BpZGVyJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODA4MC9waW5nJwogICAgICBpbnRlcnZhbDogMzBzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzCiAgd2ViOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vd2ViOmNhMDMxNjVmNWU3ZjJhNTAxMDVlNmU0MDAxOWMxN2FlNmNkZDkzNGYnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9XRUJfMzAwMAogICAgICAtICdFTlRFX0FQSV9PUklHSU49JHtTRVJWSUNFX1VSTF9NVVNFVU19JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctLWZhaWwnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJwogICAgICBpbnRlcnZhbDogMzBzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzCiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE1LWFscGluZScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotZW50ZV9kYn0nCiAgICB2b2x1bWVzOgogICAgICAtICdwb3N0Z3Jlcy1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU30gLWQgJHtQT1NUR1JFU19EQjotZW50ZV9kYn0nCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogNQogIG1pbmlvOgogICAgaW1hZ2U6ICdxdWF5LmlvL21pbmlvL21pbmlvOlJFTEVBU0UuMjAyNS0wOS0wN1QxNi0xMy0wOVonCiAgICBjb21tYW5kOiAnc2VydmVyIC9kYXRhIC0tY29uc29sZS1hZGRyZXNzICI6OTAwMSInCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBNSU5JT19TRVJWRVJfVVJMPSRNSU5JT19TRVJWRVJfVVJMCiAgICAgIC0gTUlOSU9fQlJPV1NFUl9SRURJUkVDVF9VUkw9JE1JTklPX0JST1dTRVJfUkVESVJFQ1RfVVJMCiAgICAgIC0gTUlOSU9fUk9PVF9VU0VSPSRTRVJWSUNFX1VTRVJfTUlOSU8KICAgICAgLSBNSU5JT19ST09UX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX01JTklPCiAgICB2b2x1bWVzOgogICAgICAtICdtaW5pby1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIG1jCiAgICAgICAgLSByZWFkeQogICAgICAgIC0gbG9jYWwKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIG1pbmlvLWluaXQ6CiAgICBpbWFnZTogJ21pbmlvL21jOlJFTEVBU0UuMjAyNS0wOC0xM1QwOC0zNS00MVonCiAgICBkZXBlbmRzX29uOgogICAgICBtaW5pbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2Vfc3RhcnRlZAogICAgcmVzdGFydDogb24tZmFpbHVyZQogICAgZXhjbHVkZV9mcm9tX2hjOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTUlOSU9fUk9PVF9VU0VSPSR7U0VSVklDRV9VU0VSX01JTklPfScKICAgICAgLSAnTUlOSU9fUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99JwogICAgICAtICdNSU5JT19DT1JTX1VSTFM9JFNFUlZJQ0VfVVJMX01VU0VVTSwkU0VSVklDRV9VUkxfV0VCJwogICAgZW50cnlwb2ludDogIi9iaW4vc2ggLWMgXCJcbiAgZWNobyBcXFwiTUlOSU9fQ09SU19VUkxTOiBcXCQke01JTklPX0NPUlNfVVJMU31cXFwiO1xuICBzbGVlcCA1O1xuICB1bnRpbCBtYyBhbGlhcyBzZXQgbWluaW8gaHR0cDovL21pbmlvOjkwMDAgXFwkJHtNSU5JT19ST09UX1VTRVJ9IFxcJCR7TUlOSU9fUk9PVF9QQVNTV09SRH07IGRvXG4gICAgZWNobyAnV2FpdGluZyBmb3IgTWluSU8uLi4nO1xuICAgIHNsZWVwIDI7XG4gIGRvbmU7XG4gIG1jIGFkbWluIGNvbmZpZyBzZXQgbWluaW8gYXBpIGNvcnNfYWxsb3dfb3JpZ2luPSckTUlOSU9fQ09SU19VUkxTJyB8fCB0cnVlO1xuICBtYyBtYiBtaW5pby9iMi1ldS1jZW4gLS1pZ25vcmUtZXhpc3Rpbmc7XG4gIG1jIG1iIG1pbmlvL3dhc2FiaS1ldS1jZW50cmFsLTItdjMgLS1pZ25vcmUtZXhpc3Rpbmc7XG4gIG1jIG1iIG1pbmlvL3Njdy1ldS1mci12MyAtLWlnbm9yZS1leGlzdGluZztcbiAgZWNobyAnTWluSU8gYnVja2V0cyBhbmQgQ09SUyBjb25maWd1cmVkJztcblwiIgo=", + "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOjYxM2M2YTk2MzkwZDdhNjI0Y2YzMGI5NDY5NTU3MDVkNjMyNDIzY2MnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9NVVNFVU1fODA4MAogICAgICAtIEVOVEVfREJfSE9TVD1wb3N0Z3JlcwogICAgICAtIEVOVEVfREJfUE9SVD01NDMyCiAgICAgIC0gJ0VOVEVfREJfTkFNRT0ke1BPU1RHUkVTX0RCOi1lbnRlX2RifScKICAgICAgLSAnRU5URV9EQl9VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfScKICAgICAgLSAnRU5URV9EQl9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9JwogICAgICAtICdFTlRFX0hUVFBfVVNFX1RMUz0ke0VOVEVfSFRUUF9VU0VfVExTOi1mYWxzZX0nCiAgICAgIC0gRU5URV9TM19BUkVfTE9DQUxfQlVDS0VUUz1mYWxzZQogICAgICAtIEVOVEVfUzNfVVNFX1BBVEhfU1RZTEVfVVJMUz10cnVlCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX0tFWT0ke1NFUlZJQ0VfVVNFUl9NSU5JT30nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1NFQ1JFVD0ke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9FTkRQT0lOVD0ke1NFUlZJQ0VfRlFETl9NSU5JT185MDAwfScKICAgICAgLSBFTlRFX1MzX0IyX0VVX0NFTl9SRUdJT049ZXUtY2VudHJhbC0yCiAgICAgIC0gRU5URV9TM19CMl9FVV9DRU5fQlVDS0VUPWIyLWV1LWNlbgogICAgICAtICdFTlRFX0tFWV9FTkNSWVBUSU9OPSR7U0VSVklDRV9SRUFMQkFTRTY0X0VOQ1JZUFRJT059JwogICAgICAtICdFTlRFX0tFWV9IQVNIPSR7U0VSVklDRV9SRUFMQkFTRTY0XzY0X0hBU0h9JwogICAgICAtICdFTlRFX0pXVF9TRUNSRVQ9JHtTRVJWSUNFX1JFQUxCQVNFNjRfSldUfScKICAgICAgLSAnRU5URV9JTlRFUk5BTF9BRE1JTj0ke0VOVEVfSU5URVJOQUxfQURNSU46LTE1ODA1NTk5NjIzODY0Mzh9JwogICAgICAtICdFTlRFX0lOVEVSTkFMX0RJU0FCTEVfUkVHSVNUUkFUSU9OPSR7RU5URV9JTlRFUk5BTF9ESVNBQkxFX1JFR0lTVFJBVElPTjotZmFsc2V9JwogICAgICAtICdFTlRFX1NNVFBfSE9TVD0ke0VOVEVfU01UUF9IT1NUOi1zbXRwLmdtYWlsLmNvbX0nCiAgICAgIC0gJ0VOVEVfU01UUF9QT1JUPSR7RU5URV9TTVRQX1BPUlQ6LTU4N30nCiAgICAgIC0gJ0VOVEVfU01UUF9VU0VSTkFNRT0ke0VOVEVfU01UUF9VU0VSTkFNRX0nCiAgICAgIC0gJ0VOVEVfU01UUF9QQVNTV09SRD0ke0VOVEVfU01UUF9QQVNTV09SRH0nCiAgICAgIC0gJ0VOVEVfU01UUF9FTUFJTD0ke0VOVEVfU01UUF9FTUFJTH0nCiAgICAgIC0gJ0VOVEVfU01UUF9TRU5ERVJfTkFNRT0ke0VOVEVfU01UUF9TRU5ERVJfTkFNRX0nCiAgICAgIC0gJ0VOVEVfU01UUF9FTkNSWVBUSU9OPSR7RU5URV9TTVRQX0VOQ1JZUFRJT046LXRsc30nCiAgICB2b2x1bWVzOgogICAgICAtICdtdXNldW0tZGF0YTovZGF0YScKICAgICAgLSAnbXVzZXVtLWNvbmZpZzovY29uZmlnJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgbWluaW86CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX3N0YXJ0ZWQKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLS1zcGlkZXInCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTo4MDgwL3BpbmcnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMKICB3ZWI6CiAgICBpbWFnZTogJ2doY3IuaW8vZW50ZS1pby93ZWI6Y2EwMzE2NWY1ZTdmMmE1MDEwNWU2ZTQwMDE5YzE3YWU2Y2RkOTM0ZicKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX1dFQl8zMDAwCiAgICAgIC0gJ0VOVEVfQVBJX09SSUdJTj0ke1NFUlZJQ0VfVVJMX01VU0VVTX0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy0tZmFpbCcKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjMwMDAnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMKICAgICAgc3RhcnRfcGVyaW9kOiAxMHMKICBwb3N0Z3JlczoKICAgIGltYWdlOiAncG9zdGdyZXM6MTUtYWxwaW5lJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1lbnRlX2RifScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfSAtZCAke1BPU1RHUkVTX0RCOi1lbnRlX2RifScKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiA1CiAgbWluaW86CiAgICBpbWFnZTogJ3F1YXkuaW8vbWluaW8vbWluaW86UkVMRUFTRS4yMDI1LTA5LTA3VDE2LTEzLTA5WicKICAgIGNvbW1hbmQ6ICdzZXJ2ZXIgL2RhdGEgLS1jb25zb2xlLWFkZHJlc3MgIjo5MDAxIicKICAgIGVudmlyb25tZW50OgogICAgICAtIE1JTklPX1NFUlZFUl9VUkw9JE1JTklPX1NFUlZFUl9VUkwKICAgICAgLSBNSU5JT19CUk9XU0VSX1JFRElSRUNUX1VSTD0kTUlOSU9fQlJPV1NFUl9SRURJUkVDVF9VUkwKICAgICAgLSBNSU5JT19ST09UX1VTRVI9JFNFUlZJQ0VfVVNFUl9NSU5JTwogICAgICAtIE1JTklPX1JPT1RfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfTUlOSU8KICAgIHZvbHVtZXM6CiAgICAgIC0gJ21pbmlvLWRhdGE6L2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gbWMKICAgICAgICAtIHJlYWR5CiAgICAgICAgLSBsb2NhbAogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgbWluaW8taW5pdDoKICAgIGltYWdlOiAnbWluaW8vbWM6UkVMRUFTRS4yMDI1LTA4LTEzVDA4LTM1LTQxWicKICAgIGRlcGVuZHNfb246CiAgICAgIG1pbmlvOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkCiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICAtICdNSU5JT19ST09UX1VTRVI9JHtTRVJWSUNFX1VTRVJfTUlOSU99JwogICAgICAtICdNSU5JT19ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30nCiAgICAgIC0gJ01JTklPX0NPUlNfVVJMUz0kU0VSVklDRV9VUkxfTVVTRVVNLCRTRVJWSUNFX1VSTF9XRUInCiAgICBlbnRyeXBvaW50OiAiL2Jpbi9zaCAtYyBcIlxuICBlY2hvIFxcXCJNSU5JT19DT1JTX1VSTFM6IFxcJCR7TUlOSU9fQ09SU19VUkxTfVxcXCI7XG4gIHNsZWVwIDU7XG4gIHVudGlsIG1jIGFsaWFzIHNldCBtaW5pbyBodHRwOi8vbWluaW86OTAwMCBcXCQke01JTklPX1JPT1RfVVNFUn0gXFwkJHtNSU5JT19ST09UX1BBU1NXT1JEfTsgZG9cbiAgICBlY2hvICdXYWl0aW5nIGZvciBNaW5JTy4uLic7XG4gICAgc2xlZXAgMjtcbiAgZG9uZTtcbiAgbWMgYWRtaW4gY29uZmlnIHNldCBtaW5pbyBhcGkgY29yc19hbGxvd19vcmlnaW49JyRNSU5JT19DT1JTX1VSTFMnIHx8IHRydWU7XG4gIG1jIG1iIG1pbmlvL2IyLWV1LWNlbiAtLWlnbm9yZS1leGlzdGluZztcbiAgbWMgbWIgbWluaW8vd2FzYWJpLWV1LWNlbnRyYWwtMi12MyAtLWlnbm9yZS1leGlzdGluZztcbiAgbWMgbWIgbWluaW8vc2N3LWV1LWZyLXYzIC0taWdub3JlLWV4aXN0aW5nO1xuICBlY2hvICdNaW5JTyBidWNrZXRzIGFuZCBDT1JTIGNvbmZpZ3VyZWQnO1xuXCIiCg==", "tags": [ "photos", "gallery", @@ -992,7 +1009,7 @@ "ente-photos": { "documentation": "https://help.ente.io/self-hosting/installation/compose?utm_source=coolify.io", "slogan": "Ente Photos is a fully open source, End to End Encrypted alternative to Google Photos and Apple Photos.", - "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX01VU0VVTV84MDgwCiAgICAgIC0gJ0VOVEVfSFRUUF9VU0VfVExTPSR7RU5URV9IVFRQX1VTRV9UTFM6LWZhbHNlfScKICAgICAgLSAnRU5URV9BUFBTX1BVQkxJQ19BTEJVTVM9JHtTRVJWSUNFX1VSTF9XRUJfMzAwMn0nCiAgICAgIC0gJ0VOVEVfQVBQU19DQVNUPSR7U0VSVklDRV9VUkxfV0VCXzMwMDR9JwogICAgICAtICdFTlRFX0FQUFNfQUNDT1VOVFM9JHtTRVJWSUNFX1VSTF9XRUJfMzAwMX0nCiAgICAgIC0gJ0VOVEVfREJfSE9TVD0ke0VOVEVfREJfSE9TVDotcG9zdGdyZXN9JwogICAgICAtICdFTlRFX0RCX1BPUlQ9JHtFTlRFX0RCX1BPUlQ6LTU0MzJ9JwogICAgICAtICdFTlRFX0RCX05BTUU9JHtFTlRFX0RCX05BTUU6LWVudGVfZGJ9JwogICAgICAtICdFTlRFX0RCX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVM6LXBndXNlcn0nCiAgICAgIC0gJ0VOVEVfREJfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnRU5URV9LRVlfRU5DUllQVElPTj0ke1NFUlZJQ0VfUkVBTEJBU0U2NF9FTkNSWVBUSU9OfScKICAgICAgLSAnRU5URV9LRVlfSEFTSD0ke1NFUlZJQ0VfUkVBTEJBU0U2NF82NF9IQVNIfScKICAgICAgLSAnRU5URV9KV1RfU0VDUkVUPSR7U0VSVklDRV9SRUFMQkFTRTY0X0pXVH0nCiAgICAgIC0gJ0VOVEVfSU5URVJOQUxfQURNSU49JHtFTlRFX0lOVEVSTkFMX0FETUlOOi0xNTgwNTU5OTYyMzg2NDM4fScKICAgICAgLSAnRU5URV9JTlRFUk5BTF9ESVNBQkxFX1JFR0lTVFJBVElPTj0ke0VOVEVfSU5URVJOQUxfRElTQUJMRV9SRUdJU1RSQVRJT046LWZhbHNlfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fQVJFX0xPQ0FMX0JVQ0tFVFM9JHtQUklNQVJZX1NUT1JBR0VfQVJFX0xPQ0FMX0JVQ0tFVFM6LWZhbHNlfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fVVNFX1BBVEhfU1RZTEVfVVJMUz0ke1BSSU1BUllfU1RPUkFHRV9VU0VfUEFUSF9TVFlMRV9VUkxTOi10cnVlfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fS0VZPSR7UzNfU1RPUkFHRV9LRVk6P30nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1NFQ1JFVD0ke1MzX1NUT1JBR0VfU0VDUkVUOj99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9FTkRQT0lOVD0ke1MzX1NUT1JBR0VfRU5EUE9JTlQ6P30nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1JFR0lPTj0ke1MzX1NUT1JBR0VfUkVHSU9OOi11cy1lYXN0LTF9JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9CVUNLRVQ9JHtTM19TVE9SQUdFX0JVQ0tFVDo/fScKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICB2b2x1bWVzOgogICAgICAtICdtdXNldW0tZGF0YTovZGF0YScKICAgICAgLSAnbXVzZXVtLWNvbmZpZzovY29uZmlnJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHdnZXQKICAgICAgICAtICctcU8tJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODA4MC9waW5nJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAKICB3ZWI6CiAgICBpbWFnZTogZ2hjci5pby9lbnRlLWlvL3dlYgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfV0VCXzMwMDAKICAgICAgLSAnRU5URV9BUElfT1JJR0lOPSR7U0VSVklDRV9VUkxfTVVTRVVNfScKICAgICAgLSAnRU5URV9BTEJVTVNfT1JJR0lOPSR7U0VSVklDRV9VUkxfV0VCXzMwMDJ9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctLWZhaWwnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAKICBwb3N0Z3JlczoKICAgIGltYWdlOiAncG9zdGdyZXM6MTUnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFUzotcGd1c2VyfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtTRVJWSUNFX0RCX05BTUU6LWVudGVfZGJ9JwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXMtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJHtQT1NUR1JFU19VU0VSfSAtZCAke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX01VU0VVTV84MDgwCiAgICAgIC0gJ0VOVEVfSFRUUF9VU0VfVExTPSR7RU5URV9IVFRQX1VTRV9UTFM6LWZhbHNlfScKICAgICAgLSAnRU5URV9BUFBTX1BVQkxJQ19BTEJVTVM9JHtTRVJWSUNFX1VSTF9XRUJfMzAwMn0nCiAgICAgIC0gJ0VOVEVfQVBQU19DQVNUPSR7U0VSVklDRV9VUkxfV0VCXzMwMDR9JwogICAgICAtICdFTlRFX0FQUFNfQUNDT1VOVFM9JHtTRVJWSUNFX1VSTF9XRUJfMzAwMX0nCiAgICAgIC0gJ0VOVEVfREJfSE9TVD0ke0VOVEVfREJfSE9TVDotcG9zdGdyZXN9JwogICAgICAtICdFTlRFX0RCX1BPUlQ9JHtFTlRFX0RCX1BPUlQ6LTU0MzJ9JwogICAgICAtICdFTlRFX0RCX05BTUU9JHtFTlRFX0RCX05BTUU6LWVudGVfZGJ9JwogICAgICAtICdFTlRFX0RCX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVM6LXBndXNlcn0nCiAgICAgIC0gJ0VOVEVfREJfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnRU5URV9LRVlfRU5DUllQVElPTj0ke1NFUlZJQ0VfUkVBTEJBU0U2NF9FTkNSWVBUSU9OfScKICAgICAgLSAnRU5URV9LRVlfSEFTSD0ke1NFUlZJQ0VfUkVBTEJBU0U2NF82NF9IQVNIfScKICAgICAgLSAnRU5URV9KV1RfU0VDUkVUPSR7U0VSVklDRV9SRUFMQkFTRTY0X0pXVH0nCiAgICAgIC0gJ0VOVEVfSU5URVJOQUxfQURNSU49JHtFTlRFX0lOVEVSTkFMX0FETUlOOi0xNTgwNTU5OTYyMzg2NDM4fScKICAgICAgLSAnRU5URV9JTlRFUk5BTF9ESVNBQkxFX1JFR0lTVFJBVElPTj0ke0VOVEVfSU5URVJOQUxfRElTQUJMRV9SRUdJU1RSQVRJT046LWZhbHNlfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fQVJFX0xPQ0FMX0JVQ0tFVFM9JHtQUklNQVJZX1NUT1JBR0VfQVJFX0xPQ0FMX0JVQ0tFVFM6LWZhbHNlfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fVVNFX1BBVEhfU1RZTEVfVVJMUz0ke1BSSU1BUllfU1RPUkFHRV9VU0VfUEFUSF9TVFlMRV9VUkxTOi10cnVlfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fS0VZPSR7UzNfU1RPUkFHRV9LRVk6P30nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1NFQ1JFVD0ke1MzX1NUT1JBR0VfU0VDUkVUOj99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9FTkRQT0lOVD0ke1MzX1NUT1JBR0VfRU5EUE9JTlQ6P30nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1JFR0lPTj0ke1MzX1NUT1JBR0VfUkVHSU9OOi11cy1lYXN0LTF9JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9CVUNLRVQ9JHtTM19TVE9SQUdFX0JVQ0tFVDo/fScKICAgICAgLSAnRU5URV9TTVRQX0hPU1Q9JHtFTlRFX1NNVFBfSE9TVDotc210cC5nbWFpbC5jb219JwogICAgICAtICdFTlRFX1NNVFBfUE9SVD0ke0VOVEVfU01UUF9QT1JUOi01ODd9JwogICAgICAtICdFTlRFX1NNVFBfVVNFUk5BTUU9JHtFTlRFX1NNVFBfVVNFUk5BTUV9JwogICAgICAtICdFTlRFX1NNVFBfUEFTU1dPUkQ9JHtFTlRFX1NNVFBfUEFTU1dPUkR9JwogICAgICAtICdFTlRFX1NNVFBfRU1BSUw9JHtFTlRFX1NNVFBfRU1BSUx9JwogICAgICAtICdFTlRFX1NNVFBfU0VOREVSX05BTUU9JHtFTlRFX1NNVFBfU0VOREVSX05BTUV9JwogICAgICAtICdFTlRFX1NNVFBfRU5DUllQVElPTj0ke0VOVEVfU01UUF9FTkNSWVBUSU9OOi10bHN9JwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIHZvbHVtZXM6CiAgICAgIC0gJ211c2V1bS1kYXRhOi9kYXRhJwogICAgICAtICdtdXNldW0tY29uZmlnOi9jb25maWcnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gd2dldAogICAgICAgIC0gJy1xTy0nCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTo4MDgwL3BpbmcnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiAxMAogIHdlYjoKICAgIGltYWdlOiBnaGNyLmlvL2VudGUtaW8vd2ViCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9XRUJfMzAwMAogICAgICAtICdFTlRFX0FQSV9PUklHSU49JHtTRVJWSUNFX1VSTF9NVVNFVU19JwogICAgICAtICdFTlRFX0FMQlVNU19PUklHSU49JHtTRVJWSUNFX1VSTF9XRUJfMzAwMn0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy0tZmFpbCcKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjMwMDAnCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiAxMAogIHBvc3RncmVzOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTOi1wZ3VzZXJ9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1NFUlZJQ0VfREJfTkFNRTotZW50ZV9kYn0nCiAgICB2b2x1bWVzOgogICAgICAtICdwb3N0Z3Jlcy1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAke1BPU1RHUkVTX1VTRVJ9IC1kICR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAK", "tags": [ "photos", "gallery", @@ -2550,7 +2567,7 @@ "n8n-with-postgres-and-worker": { "documentation": "https://n8n.io?utm_source=coolify.io", "slogan": "n8n is an extendable workflow automation tool with queue mode and workers.", - "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9OOE5fNTY3OAogICAgICAtICdOOE5fRURJVE9SX0JBU0VfVVJMPSR7U0VSVklDRV9VUkxfTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdOOE5fSE9TVD0ke1NFUlZJQ0VfVVJMX044Tn0nCiAgICAgIC0gJ0dFTkVSSUNfVElNRVpPTkU9JHtHRU5FUklDX1RJTUVaT05FOi1FdXJvcGUvQmVybGlufScKICAgICAgLSAnVFo9JHtUWjotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gREJfVFlQRT1wb3N0Z3Jlc2RiCiAgICAgIC0gJ0RCX1BPU1RHUkVTREJfREFUQUJBU0U9JHtQT1NUR1JFU19EQjotbjhufScKICAgICAgLSBEQl9QT1NUR1JFU0RCX0hPU1Q9cG9zdGdyZXNxbAogICAgICAtIERCX1BPU1RHUkVTREJfUE9SVD01NDMyCiAgICAgIC0gREJfUE9TVEdSRVNEQl9VU0VSPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBEQl9QT1NUR1JFU0RCX1NDSEVNQT1wdWJsaWMKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gRVhFQ1VUSU9OU19NT0RFPXF1ZXVlCiAgICAgIC0gUVVFVUVfQlVMTF9SRURJU19IT1NUPXJlZGlzCiAgICAgIC0gUVVFVUVfSEVBTFRIX0NIRUNLX0FDVElWRT10cnVlCiAgICAgIC0gJ044Tl9FTkNSWVBUSU9OX0tFWT0ke1NFUlZJQ0VfUEFTU1dPUkRfRU5DUllQVElPTn0nCiAgICAgIC0gTjhOX1JVTk5FUlNfRU5BQkxFRD10cnVlCiAgICAgIC0gT0ZGTE9BRF9NQU5VQUxfRVhFQ1VUSU9OU19UT19XT1JLRVJTPXRydWUKICAgICAgLSAnTjhOX0JMT0NLX0VOVl9BQ0NFU1NfSU5fTk9ERT0ke044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU6LXRydWV9JwogICAgICAtICdOOE5fRU5GT1JDRV9TRVRUSU5HU19GSUxFX1BFUk1JU1NJT05TPSR7TjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUzotdHJ1ZX0nCiAgICB2b2x1bWVzOgogICAgICAtICduOG4tZGF0YTovaG9tZS9ub2RlLy5uOG4nCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHJlZGlzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3dnZXQgLXFPLSBodHRwOi8vMTI3LjAuMC4xOjU2NzgvJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgbjhuLXdvcmtlcjoKICAgIGltYWdlOiBkb2NrZXIubjhuLmlvL244bmlvL244bgogICAgY29tbWFuZDogd29ya2VyCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnR0VORVJJQ19USU1FWk9ORT0ke0dFTkVSSUNfVElNRVpPTkU6LUV1cm9wZS9CZXJsaW59JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQmVybGlufScKICAgICAgLSBEQl9UWVBFPXBvc3RncmVzZGIKICAgICAgLSAnREJfUE9TVEdSRVNEQl9EQVRBQkFTRT0ke1BPU1RHUkVTX0RCOi1uOG59JwogICAgICAtIERCX1BPU1RHUkVTREJfSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QT1JUPTU0MzIKICAgICAgLSBEQl9QT1NUR1JFU0RCX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIERCX1BPU1RHUkVTREJfU0NIRU1BPXB1YmxpYwogICAgICAtIERCX1BPU1RHUkVTREJfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgICAgLSBFWEVDVVRJT05TX01PREU9cXVldWUKICAgICAgLSBRVUVVRV9CVUxMX1JFRElTX0hPU1Q9cmVkaXMKICAgICAgLSBRVUVVRV9IRUFMVEhfQ0hFQ0tfQUNUSVZFPXRydWUKICAgICAgLSAnTjhOX0VOQ1JZUFRJT05fS0VZPSR7U0VSVklDRV9QQVNTV09SRF9FTkNSWVBUSU9OfScKICAgICAgLSBOOE5fUlVOTkVSU19FTkFCTEVEPXRydWUKICAgICAgLSAnTjhOX0JMT0NLX0VOVl9BQ0NFU1NfSU5fTk9ERT0ke044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU6LXRydWV9JwogICAgICAtICdOOE5fRU5GT1JDRV9TRVRUSU5HU19GSUxFX1BFUk1JU1NJT05TPSR7TjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUzotdHJ1ZX0nCiAgICB2b2x1bWVzOgogICAgICAtICduOG4tZGF0YTovaG9tZS9ub2RlLy5uOG4nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3dnZXQgLXFPLSBodHRwOi8vMTI3LjAuMC4xOjU2NzgvaGVhbHRoeicKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogICAgZGVwZW5kc19vbjoKICAgICAgbjhuOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcmVkaXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdwb3N0Z3Jlc3FsLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUE9TVEdSRVNfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotbjhufScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICByZWRpczoKICAgIGltYWdlOiAncmVkaXM6Ni1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdyZWRpcy1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gcGluZwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAK", + "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6ICdkb2NrZXIubjhuLmlvL244bmlvL244bjoxLjExNC40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfTjhOXzU2NzgKICAgICAgLSAnTjhOX0VESVRPUl9CQVNFX1VSTD0ke1NFUlZJQ0VfVVJMX044Tn0nCiAgICAgIC0gJ1dFQkhPT0tfVVJMPSR7U0VSVklDRV9VUkxfTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSR7R0VORVJJQ19USU1FWk9ORTotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9CZXJsaW59JwogICAgICAtIERCX1RZUEU9cG9zdGdyZXNkYgogICAgICAtICdEQl9QT1NUR1JFU0RCX0RBVEFCQVNFPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICAgIC0gREJfUE9TVEdSRVNEQl9IT1NUPXBvc3RncmVzcWwKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BPUlQ9NTQzMgogICAgICAtIERCX1BPU1RHUkVTREJfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gREJfUE9TVEdSRVNEQl9TQ0hFTUE9cHVibGljCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtIEVYRUNVVElPTlNfTU9ERT1xdWV1ZQogICAgICAtIFFVRVVFX0JVTExfUkVESVNfSE9TVD1yZWRpcwogICAgICAtIFFVRVVFX0hFQUxUSF9DSEVDS19BQ1RJVkU9dHJ1ZQogICAgICAtICdOOE5fRU5DUllQVElPTl9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEX0VOQ1JZUFRJT059JwogICAgICAtIE44Tl9SVU5ORVJTX0VOQUJMRUQ9dHJ1ZQogICAgICAtIE9GRkxPQURfTUFOVUFMX0VYRUNVVElPTlNfVE9fV09SS0VSUz10cnVlCiAgICAgIC0gJ044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU9JHtOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFOi10cnVlfScKICAgICAgLSAnTjhOX0dJVF9OT0RFX0RJU0FCTEVfQkFSRV9SRVBPUz0ke044Tl9HSVRfTk9ERV9ESVNBQkxFX0JBUkVfUkVQT1M6LXRydWV9JwogICAgICAtICdOOE5fRU5GT1JDRV9TRVRUSU5HU19GSUxFX1BFUk1JU1NJT05TPSR7TjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUzotdHJ1ZX0nCiAgICAgIC0gJ044Tl9QUk9YWV9IT1BTPSR7TjhOX1BST1hZX0hPUFM6LTF9JwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo1Njc4LycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIG44bi13b3JrZXI6CiAgICBpbWFnZTogJ2RvY2tlci5uOG4uaW8vbjhuaW8vbjhuOjEuMTE0LjQnCiAgICBjb21tYW5kOiB3b3JrZXIKICAgIGVudmlyb25tZW50OgogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSR7R0VORVJJQ19USU1FWk9ORTotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9CZXJsaW59JwogICAgICAtIERCX1RZUEU9cG9zdGdyZXNkYgogICAgICAtICdEQl9QT1NUR1JFU0RCX0RBVEFCQVNFPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICAgIC0gREJfUE9TVEdSRVNEQl9IT1NUPXBvc3RncmVzcWwKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BPUlQ9NTQzMgogICAgICAtIERCX1BPU1RHUkVTREJfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gREJfUE9TVEdSRVNEQl9TQ0hFTUE9cHVibGljCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtIEVYRUNVVElPTlNfTU9ERT1xdWV1ZQogICAgICAtIFFVRVVFX0JVTExfUkVESVNfSE9TVD1yZWRpcwogICAgICAtIFFVRVVFX0hFQUxUSF9DSEVDS19BQ1RJVkU9dHJ1ZQogICAgICAtICdOOE5fRU5DUllQVElPTl9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEX0VOQ1JZUFRJT059JwogICAgICAtIE44Tl9SVU5ORVJTX0VOQUJMRUQ9dHJ1ZQogICAgICAtICdOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFPSR7TjhOX0JMT0NLX0VOVl9BQ0NFU1NfSU5fTk9ERTotdHJ1ZX0nCiAgICAgIC0gJ044Tl9HSVRfTk9ERV9ESVNBQkxFX0JBUkVfUkVQT1M9JHtOOE5fR0lUX05PREVfRElTQUJMRV9CQVJFX1JFUE9TOi10cnVlfScKICAgICAgLSAnTjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUz0ke044Tl9FTkZPUkNFX1NFVFRJTkdTX0ZJTEVfUEVSTUlTU0lPTlM6LXRydWV9JwogICAgICAtICdOOE5fUFJPWFlfSE9QUz0ke044Tl9QUk9YWV9IT1BTOi0xfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ244bi1kYXRhOi9ob21lL25vZGUvLm44bicKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnd2dldCAtcU8tIGh0dHA6Ly8xMjcuMC4wLjE6NTY3OC9oZWFsdGh6JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgICBkZXBlbmRzX29uOgogICAgICBuOG46CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogIHBvc3RncmVzcWw6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBQT1NUR1JFU19VU0VSPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBQT1NUR1JFU19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1uOG59JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHJlZGlzOgogICAgaW1hZ2U6ICdyZWRpczo2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3JlZGlzLWRhdGE6L2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gcmVkaXMtY2xpCiAgICAgICAgLSBwaW5nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "n8n", "workflow", @@ -2571,7 +2588,7 @@ "n8n-with-postgresql": { "documentation": "https://n8n.io?utm_source=coolify.io", "slogan": "n8n is an extendable workflow automation tool.", - "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9OOE5fNTY3OAogICAgICAtICdOOE5fRURJVE9SX0JBU0VfVVJMPSR7U0VSVklDRV9VUkxfTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdOOE5fSE9TVD0ke1NFUlZJQ0VfVVJMX044Tn0nCiAgICAgIC0gJ0dFTkVSSUNfVElNRVpPTkU9JHtHRU5FUklDX1RJTUVaT05FOi1FdXJvcGUvQmVybGlufScKICAgICAgLSAnVFo9JHtUWjotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gREJfVFlQRT1wb3N0Z3Jlc2RiCiAgICAgIC0gJ0RCX1BPU1RHUkVTREJfREFUQUJBU0U9JHtQT1NUR1JFU19EQjotbjhufScKICAgICAgLSBEQl9QT1NUR1JFU0RCX0hPU1Q9cG9zdGdyZXNxbAogICAgICAtIERCX1BPU1RHUkVTREJfUE9SVD01NDMyCiAgICAgIC0gREJfUE9TVEdSRVNEQl9VU0VSPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBEQl9QT1NUR1JFU0RCX1NDSEVNQT1wdWJsaWMKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICB2b2x1bWVzOgogICAgICAtICduOG4tZGF0YTovaG9tZS9ub2RlLy5uOG4nCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3dnZXQgLXFPLSBodHRwOi8vMTI3LjAuMC4xOjU2NzgvJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJCR7UE9TVEdSRVNfVVNFUn0gLWQgJCR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6ICdkb2NrZXIubjhuLmlvL244bmlvL244bjoxLjExNC40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfTjhOXzU2NzgKICAgICAgLSAnTjhOX0VESVRPUl9CQVNFX1VSTD0ke1NFUlZJQ0VfVVJMX044Tn0nCiAgICAgIC0gJ1dFQkhPT0tfVVJMPSR7U0VSVklDRV9VUkxfTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSR7R0VORVJJQ19USU1FWk9ORTotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9CZXJsaW59JwogICAgICAtIERCX1RZUEU9cG9zdGdyZXNkYgogICAgICAtICdEQl9QT1NUR1JFU0RCX0RBVEFCQVNFPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICAgIC0gREJfUE9TVEdSRVNEQl9IT1NUPXBvc3RncmVzcWwKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BPUlQ9NTQzMgogICAgICAtIERCX1BPU1RHUkVTREJfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gREJfUE9TVEdSRVNEQl9TQ0hFTUE9cHVibGljCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdOOE5fUlVOTkVSU19FTkFCTEVEPSR7TjhOX1JVTk5FUlNfRU5BQkxFRDotdHJ1ZX0nCiAgICAgIC0gJ044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU9JHtOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFOi10cnVlfScKICAgICAgLSAnTjhOX0dJVF9OT0RFX0RJU0FCTEVfQkFSRV9SRVBPUz0ke044Tl9HSVRfTk9ERV9ESVNBQkxFX0JBUkVfUkVQT1M6LXRydWV9JwogICAgICAtICdOOE5fRU5GT1JDRV9TRVRUSU5HU19GSUxFX1BFUk1JU1NJT05TPSR7TjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUzotdHJ1ZX0nCiAgICAgIC0gJ044Tl9QUk9YWV9IT1BTPSR7TjhOX1BST1hZX0hPUFM6LTF9JwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo1Njc4LycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHBvc3RncmVzcWw6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBQT1NUR1JFU19VU0VSPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBQT1NUR1JFU19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1uOG59JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "n8n", "workflow", @@ -2589,7 +2606,7 @@ "n8n": { "documentation": "https://n8n.io?utm_source=coolify.io", "slogan": "n8n is an extendable workflow automation tool.", - "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9OOE5fNTY3OAogICAgICAtICdOOE5fRURJVE9SX0JBU0VfVVJMPSR7U0VSVklDRV9VUkxfTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdOOE5fSE9TVD0ke1NFUlZJQ0VfVVJMX044Tn0nCiAgICAgIC0gJ0dFTkVSSUNfVElNRVpPTkU9JHtHRU5FUklDX1RJTUVaT05FOi1FdXJvcGUvQmVybGlufScKICAgICAgLSAnVFo9JHtUWjotRXVyb3BlL0Jlcmxpbn0nCiAgICB2b2x1bWVzOgogICAgICAtICduOG4tZGF0YTovaG9tZS9ub2RlLy5uOG4nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3dnZXQgLXFPLSBodHRwOi8vMTI3LjAuMC4xOjU2NzgvJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6ICdkb2NrZXIubjhuLmlvL244bmlvL244bjoxLjExNC40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfTjhOXzU2NzgKICAgICAgLSAnTjhOX0VESVRPUl9CQVNFX1VSTD0ke1NFUlZJQ0VfVVJMX044Tn0nCiAgICAgIC0gJ1dFQkhPT0tfVVJMPSR7U0VSVklDRV9VUkxfTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX1VSTF9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSR7R0VORVJJQ19USU1FWk9ORTotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9CZXJsaW59JwogICAgICAtICdEQl9TUUxJVEVfUE9PTF9TSVpFPSR7REJfU1FMSVRFX1BPT0xfU0laRTotM30nCiAgICAgIC0gJ044Tl9SVU5ORVJTX0VOQUJMRUQ9JHtOOE5fUlVOTkVSU19FTkFCTEVEOi10cnVlfScKICAgICAgLSAnTjhOX0JMT0NLX0VOVl9BQ0NFU1NfSU5fTk9ERT0ke044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU6LXRydWV9JwogICAgICAtICdOOE5fR0lUX05PREVfRElTQUJMRV9CQVJFX1JFUE9TPSR7TjhOX0dJVF9OT0RFX0RJU0FCTEVfQkFSRV9SRVBPUzotdHJ1ZX0nCiAgICAgIC0gJ044Tl9FTkZPUkNFX1NFVFRJTkdTX0ZJTEVfUEVSTUlTU0lPTlM9JHtOOE5fRU5GT1JDRV9TRVRUSU5HU19GSUxFX1BFUk1JU1NJT05TOi10cnVlfScKICAgICAgLSAnTjhOX1BST1hZX0hPUFM9JHtOOE5fUFJPWFlfSE9QUzotMX0nCiAgICB2b2x1bWVzOgogICAgICAtICduOG4tZGF0YTovaG9tZS9ub2RlLy5uOG4nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3dnZXQgLXFPLSBodHRwOi8vMTI3LjAuMC4xOjU2NzgvJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCg==", "tags": [ "n8n", "workflow", @@ -3380,6 +3397,20 @@ "minversion": "0.0.0", "port": "9696" }, + "proxyscotch": { + "documentation": "https://github.com/hoppscotch/proxyscotch?utm_source=coolify.io", + "slogan": "A simple proxy server created for https://hoppscotch.io - CORS proxy", + "compose": "c2VydmljZXM6CiAgcHJveHlzY290Y2g6CiAgICBpbWFnZTogJ2hvcHBzY290Y2gvcHJveHlzY290Y2g6djAuMS40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfUFJPWFlTQ09UQ0hfOTE1OQogICAgICAtICdQUk9YWVNDT1RDSF9UT0tFTj0ke1NFUlZJQ0VfUEFTU1dPUkRfVE9LRU59JwogICAgICAtICdQUk9YWVNDT1RDSF9BTExPV0VEX09SSUdJTlM9JHtBTExPV0VEX09SSUdJTlM6LSp9JwogICAgICAtICdQUk9YWVNDT1RDSF9CQU5ORURfT1VUUFVUUz0ke0JBTk5FRF9PVVRQVVRTfScKICAgICAgLSAnUFJPWFlTQ09UQ0hfQkFOTkVEX0RFU1RTPSR7QkFOTkVEX0RFU1RTfScK", + "tags": [ + "proxy", + "hoppscotch", + "cors" + ], + "category": null, + "logo": "svgs/hoppscotch.png", + "minversion": "0.0.0", + "port": "9159" + }, "pterodactyl-with-wings": { "documentation": "https://pterodactyl.io/?utm_source=coolify.io", "slogan": "Pterodactyl is a free, open-source game server management panel", @@ -3641,7 +3672,7 @@ "shlink": { "documentation": "https://shlink.io/?utm_source=coolify.io", "slogan": "The definitive self-hosted URL shortener", - "compose": "c2VydmljZXM6CiAgc2hsaW5rOgogICAgaW1hZ2U6ICdzaGxpbmtpby9zaGxpbms6c3RhYmxlJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfU0hMSU5LXzgwODAKICAgICAgLSAnREVGQVVMVF9ET01BSU49JHtTRVJWSUNFX1VSTF9TSExJTkt9JwogICAgICAtIElTX0hUVFBTX0VOQUJMRUQ9ZmFsc2UKICAgICAgLSAnSU5JVElBTF9BUElfS0VZPSR7U0VSVklDRV9CQVNFNjRfU0hMSU5LQVBJS0VZfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3NobGluay1kYXRhOi9ldGMvc2hsaW5rL2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODA4MC9yZXN0L3YzL2hlYWx0aCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQogIHNobGluay13ZWI6CiAgICBpbWFnZTogc2hsaW5raW8vc2hsaW5rLXdlYi1jbGllbnQKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX1NITElOS1dFQl84MDgwCiAgICAgIC0gJ1NITElOS19TRVJWRVJfQVBJX0tFWT0ke1NFUlZJQ0VfQkFTRTY0X1NITElOS0FQSUtFWX0nCiAgICAgIC0gJ1NITElOS19TRVJWRVJfVVJMPSR7U0VSVklDRV9VUkxfU0hMSU5LfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLWYnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTo4MDgwJwogICAgICBpbnRlcnZhbDogMnMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDE1Cg==", + "compose": "c2VydmljZXM6CiAgc2hsaW5rOgogICAgaW1hZ2U6ICdzaGxpbmtpby9zaGxpbms6c3RhYmxlJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9VUkxfU0hMSU5LXzgwODAKICAgICAgLSAnREVGQVVMVF9ET01BSU49JHtTRVJWSUNFX0ZRRE5fU0hMSU5LfScKICAgICAgLSBJU19IVFRQU19FTkFCTEVEPWZhbHNlCiAgICAgIC0gJ0lOSVRJQUxfQVBJX0tFWT0ke1NFUlZJQ0VfQkFTRTY0X1NITElOS0FQSUtFWX0nCiAgICB2b2x1bWVzOgogICAgICAtICdzaGxpbmstZGF0YTovZXRjL3NobGluay9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctZicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjgwODAvcmVzdC92My9oZWFsdGgnCiAgICAgIGludGVydmFsOiAycwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMTUKICBzaGxpbmstd2ViOgogICAgaW1hZ2U6IHNobGlua2lvL3NobGluay13ZWItY2xpZW50CiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9TSExJTktXRUJfODA4MAogICAgICAtICdTSExJTktfU0VSVkVSX0FQSV9LRVk9JHtTRVJWSUNFX0JBU0U2NF9TSExJTktBUElLRVl9JwogICAgICAtICdTSExJTktfU0VSVkVSX1VSTD0ke1NFUlZJQ0VfVVJMX1NITElOS30nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy1mJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODA4MCcKICAgICAgaW50ZXJ2YWw6IDJzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAxNQo=", "tags": [ "links", "shortener", @@ -3656,6 +3687,25 @@ "minversion": "0.0.0", "port": "8080" }, + "signoz": { + "documentation": "https://signoz.io/docs/introduction/?utm_source=coolify.io", + "slogan": "An observability platform native to OpenTelemetry with logs, traces and metrics.", + "compose": "c2VydmljZXM6CiAgaW5pdC1jbGlja2hvdXNlOgogICAgaW1hZ2U6ICdjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNi1hbHBpbmUnCiAgICBjb21tYW5kOgogICAgICAtIGJhc2gKICAgICAgLSAnLWMnCiAgICAgIC0gInZlcnNpb249XCJ2MC4wLjFcIlxubm9kZV9vcz0kJCh1bmFtZSAtcyB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKVxubm9kZV9hcmNoPSQkKHVuYW1lIC1tIHwgc2VkIHMvYWFyY2g2NC9hcm02NC8gfCBzZWQgcy94ODZfNjQvYW1kNjQvKVxuZWNobyBcIkZldGNoaW5nIGhpc3RvZ3JhbS1iaW5hcnkgZm9yICQke25vZGVfb3N9LyQke25vZGVfYXJjaH1cIlxuY2QgL3RtcFxud2dldCAtTyBoaXN0b2dyYW0tcXVhbnRpbGUudGFyLmd6IFwiaHR0cHM6Ly9naXRodWIuY29tL1NpZ05vei9zaWdub3ovcmVsZWFzZXMvZG93bmxvYWQvaGlzdG9ncmFtLXF1YW50aWxlJTJGJCR7dmVyc2lvbn0vaGlzdG9ncmFtLXF1YW50aWxlXyQke25vZGVfb3N9XyQke25vZGVfYXJjaH0udGFyLmd6XCJcbnRhciAteHZ6ZiBoaXN0b2dyYW0tcXVhbnRpbGUudGFyLmd6XG5ta2RpciAtcCAvdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy9oaXN0b2dyYW1RdWFudGlsZVxubXYgaGlzdG9ncmFtLXF1YW50aWxlIC92YXIvbGliL2NsaWNraG91c2UvdXNlcl9zY3JpcHRzL2hpc3RvZ3JhbVF1YW50aWxlXG4iCiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICB6b29rZWVwZXI6CiAgICBpbWFnZTogJ3NpZ25vei96b29rZWVwZXI6My45LjMnCiAgICB1c2VyOiByb290CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ2N1cmwgLXMgLW0gMiBodHRwOi8vbG9jYWxob3N0OjgwODAvY29tbWFuZHMvcnVvayB8IGdyZXAgZXJyb3IgfCBncmVwIG51bGwnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMwogICAgbG9nZ2luZzoKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtc2l6ZTogNTBtCiAgICAgICAgbWF4LWZpbGU6ICczJwogICAgdm9sdW1lczoKICAgICAgLSAnem9va2VlcGVyOi9iaXRuYW1pL3pvb2tlZXBlcicKICAgIGVudmlyb25tZW50OgogICAgICAtICdBTExPV19BTk9OWU1PVVNfTE9HSU49JHtaT09fQUxMT1dfQU5PTllNT1VTX0xPR0lOOi15ZXN9JwogICAgICAtICdaT09fQVVUT1BVUkdFX0lOVEVSVkFMPSR7Wk9PX0FVVE9QVVJHRV9JTlRFUlZBTDotMX0nCiAgICAgIC0gJ1pPT19FTkFCTEVfUFJPTUVUSEVVU19NRVRSSUNTPSR7Wk9PX0VOQUJMRV9QUk9NRVRIRVVTX01FVFJJQ1M6LXllc30nCiAgICAgIC0gJ1pPT19QUk9NRVRIRVVTX01FVFJJQ1NfUE9SVF9OVU1CRVI9JHtaT09fUFJPTUVUSEVVU19NRVRSSUNTX1BPUlRfTlVNQkVSOi05MTQxfScKICBjbGlja2hvdXNlOgogICAgaW1hZ2U6ICdjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNi1hbHBpbmUnCiAgICB0dHk6IHRydWUKICAgIGRlcGVuZHNfb246CiAgICAgIGluaXQtY2xpY2tob3VzZToKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgICB6b29rZWVwZXI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLS1zcGlkZXInCiAgICAgICAgLSAnLXEnCiAgICAgICAgLSAnMC4wLjAuMDo4MTIzL3BpbmcnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMwogICAgdWxpbWl0czoKICAgICAgbnByb2M6IDY1NTM1CiAgICAgIG5vZmlsZToKICAgICAgICBzb2Z0OiAyNjIxNDQKICAgICAgICBoYXJkOiAyNjIxNDQKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICAgIGVudmlyb25tZW50OgogICAgICAtIENMSUNLSE9VU0VfU0tJUF9VU0VSX1NFVFVQPTEKICAgIHZvbHVtZXM6CiAgICAgIC0KICAgICAgICB0eXBlOiB2b2x1bWUKICAgICAgICBzb3VyY2U6IGNsaWNraG91c2UKICAgICAgICB0YXJnZXQ6IC92YXIvbGliL2NsaWNraG91c2UvCiAgICAgIC0KICAgICAgICB0eXBlOiBiaW5kCiAgICAgICAgc291cmNlOiAuL2NsaWNraG91c2UvY3VzdG9tLWZ1bmN0aW9uLnhtbAogICAgICAgIHRhcmdldDogL2V0Yy9jbGlja2hvdXNlLXNlcnZlci9jdXN0b20tZnVuY3Rpb24ueG1sCiAgICAgICAgY29udGVudDogIjxmdW5jdGlvbnM+XG4gICAgPGZ1bmN0aW9uPlxuICAgICAgICA8dHlwZT5leGVjdXRhYmxlPC90eXBlPlxuICAgICAgICA8bmFtZT5oaXN0b2dyYW1RdWFudGlsZTwvbmFtZT5cbiAgICAgICAgPHJldHVybl90eXBlPkZsb2F0NjQ8L3JldHVybl90eXBlPlxuICAgICAgICA8YXJndW1lbnQ+XG4gICAgICAgICAgICA8dHlwZT5BcnJheShGbG9hdDY0KTwvdHlwZT5cbiAgICAgICAgICAgIDxuYW1lPmJ1Y2tldHM8L25hbWU+XG4gICAgICAgIDwvYXJndW1lbnQ+XG4gICAgICAgIDxhcmd1bWVudD5cbiAgICAgICAgICAgIDx0eXBlPkFycmF5KEZsb2F0NjQpPC90eXBlPlxuICAgICAgICAgICAgPG5hbWU+Y291bnRzPC9uYW1lPlxuICAgICAgICA8L2FyZ3VtZW50PlxuICAgICAgICA8YXJndW1lbnQ+XG4gICAgICAgICAgICA8dHlwZT5GbG9hdDY0PC90eXBlPlxuICAgICAgICAgICAgPG5hbWU+cXVhbnRpbGU8L25hbWU+XG4gICAgICAgIDwvYXJndW1lbnQ+XG4gICAgICAgIDxmb3JtYXQ+Q1NWPC9mb3JtYXQ+XG4gICAgICAgIDxjb21tYW5kPi4vaGlzdG9ncmFtUXVhbnRpbGU8L2NvbW1hbmQ+XG4gICAgPC9mdW5jdGlvbj5cbjwvZnVuY3Rpb25zPlxuIgogICAgICAtCiAgICAgICAgdHlwZTogYmluZAogICAgICAgIHNvdXJjZTogLi9jbGlja2hvdXNlL2NsdXN0ZXIueG1sCiAgICAgICAgdGFyZ2V0OiAvZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2NsdXN0ZXIueG1sCiAgICAgICAgY29udGVudDogIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIFpvb0tlZXBlciBpcyB1c2VkIHRvIHN0b3JlIG1ldGFkYXRhIGFib3V0IHJlcGxpY2FzLCB3aGVuIHVzaW5nIFJlcGxpY2F0ZWQgdGFibGVzLlxuICAgICAgICBPcHRpb25hbC4gSWYgeW91IGRvbid0IHVzZSByZXBsaWNhdGVkIHRhYmxlcywgeW91IGNvdWxkIG9taXQgdGhhdC5cblxuICAgICAgICBTZWUgaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL2VuZ2luZXMvdGFibGUtZW5naW5lcy9tZXJnZXRyZWUtZmFtaWx5L3JlcGxpY2F0aW9uL1xuICAgICAgLS0+XG4gICAgPHpvb2tlZXBlcj5cbiAgICAgICAgPG5vZGUgaW5kZXg9XCIxXCI+XG4gICAgICAgICAgICA8aG9zdD56b29rZWVwZXI8L2hvc3Q+XG4gICAgICAgICAgICA8cG9ydD4yMTgxPC9wb3J0PlxuICAgICAgICA8L25vZGU+XG4gICAgPC96b29rZWVwZXI+XG5cbiAgICA8IS0tIENvbmZpZ3VyYXRpb24gb2YgY2x1c3RlcnMgdGhhdCBjb3VsZCBiZSB1c2VkIGluIERpc3RyaWJ1dGVkIHRhYmxlcy5cbiAgICAgICAgaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL29wZXJhdGlvbnMvdGFibGVfZW5naW5lcy9kaXN0cmlidXRlZC9cbiAgICAgIC0tPlxuICAgIDxyZW1vdGVfc2VydmVycz5cbiAgICAgICAgPGNsdXN0ZXI+XG4gICAgICAgICAgICA8IS0tIEludGVyLXNlcnZlciBwZXItY2x1c3RlciBzZWNyZXQgZm9yIERpc3RyaWJ1dGVkIHF1ZXJpZXNcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBubyBzZWNyZXQgKG5vIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgcGVyZm9ybWVkKVxuXG4gICAgICAgICAgICAgICAgSWYgc2V0LCB0aGVuIERpc3RyaWJ1dGVkIHF1ZXJpZXMgd2lsbCBiZSB2YWxpZGF0ZWQgb24gc2hhcmRzLCBzbyBhdCBsZWFzdDpcbiAgICAgICAgICAgICAgICAtIHN1Y2ggY2x1c3RlciBzaG91bGQgZXhpc3Qgb24gdGhlIHNoYXJkLFxuICAgICAgICAgICAgICAgIC0gc3VjaCBjbHVzdGVyIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNlY3JldC5cblxuICAgICAgICAgICAgICAgIEFuZCBhbHNvIChhbmQgd2hpY2ggaXMgbW9yZSBpbXBvcnRhbnQpLCB0aGUgaW5pdGlhbF91c2VyIHdpbGxcbiAgICAgICAgICAgICAgICBiZSB1c2VkIGFzIGN1cnJlbnQgdXNlciBmb3IgdGhlIHF1ZXJ5LlxuXG4gICAgICAgICAgICAgICAgUmlnaHQgbm93IHRoZSBwcm90b2NvbCBpcyBwcmV0dHkgc2ltcGxlIGFuZCBpdCBvbmx5IHRha2VzIGludG8gYWNjb3VudDpcbiAgICAgICAgICAgICAgICAtIGNsdXN0ZXIgbmFtZVxuICAgICAgICAgICAgICAgIC0gcXVlcnlcblxuICAgICAgICAgICAgICAgIEFsc28gaXQgd2lsbCBiZSBuaWNlIGlmIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSBpbXBsZW1lbnRlZDpcbiAgICAgICAgICAgICAgICAtIHNvdXJjZSBob3N0bmFtZSAoc2VlIGludGVyc2VydmVyX2h0dHBfaG9zdCksIGJ1dCB0aGVuIGl0IHdpbGwgZGVwZW5kcyBmcm9tIEROUyxcbiAgICAgICAgICAgICAgICAgIGl0IGNhbiB1c2UgSVAgYWRkcmVzcyBpbnN0ZWFkLCBidXQgdGhlbiB0aGUgeW91IG5lZWQgdG8gZ2V0IGNvcnJlY3Qgb24gdGhlIGluaXRpYXRvciBub2RlLlxuICAgICAgICAgICAgICAgIC0gdGFyZ2V0IGhvc3RuYW1lIC8gaXAgYWRkcmVzcyAoc2FtZSBub3RlcyBhcyBmb3Igc291cmNlIGhvc3RuYW1lKVxuICAgICAgICAgICAgICAgIC0gdGltZS1iYXNlZCBzZWN1cml0eSB0b2tlbnNcbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPCEtLSA8c2VjcmV0Pjwvc2VjcmV0PiAtLT5cbiAgICAgICAgICAgIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbmFsLiBXaGV0aGVyIHRvIHdyaXRlIGRhdGEgdG8ganVzdCBvbmUgb2YgdGhlIHJlcGxpY2FzLiBEZWZhdWx0OiBmYWxzZSAod3JpdGUgZGF0YSB0byBhbGwgcmVwbGljYXMpLiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIDxpbnRlcm5hbF9yZXBsaWNhdGlvbj5mYWxzZTwvaW50ZXJuYWxfcmVwbGljYXRpb24+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9uYWwuIFNoYXJkIHdlaWdodCB3aGVuIHdyaXRpbmcgZGF0YS4gRGVmYXVsdDogMS4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8d2VpZ2h0PjE8L3dlaWdodD4gLS0+XG4gICAgICAgICAgICAgICAgPHJlcGxpY2E+XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmNsaWNraG91c2U8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjkwMDA8L3BvcnQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9uYWwuIFByaW9yaXR5IG9mIHRoZSByZXBsaWNhIGZvciBsb2FkX2JhbGFuY2luZy4gRGVmYXVsdDogMSAobGVzcyB2YWx1ZSBoYXMgbW9yZSBwcmlvcml0eSkuIC0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxwcmlvcml0eT4xPC9wcmlvcml0eT4gLS0+XG4gICAgICAgICAgICAgICAgPC9yZXBsaWNhPlxuICAgICAgICAgICAgPC9zaGFyZD5cbiAgICAgICAgICAgIDwhLS0gPHNoYXJkPlxuICAgICAgICAgICAgICAgIDxyZXBsaWNhPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5jbGlja2hvdXNlLTI8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjkwMDA8L3BvcnQ+XG4gICAgICAgICAgICAgICAgPC9yZXBsaWNhPlxuICAgICAgICAgICAgPC9zaGFyZD5cbiAgICAgICAgICAgIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8cmVwbGljYT5cbiAgICAgICAgICAgICAgICAgICAgPGhvc3Q+Y2xpY2tob3VzZS0zPC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD45MDAwPC9wb3J0PlxuICAgICAgICAgICAgICAgIDwvcmVwbGljYT5cbiAgICAgICAgICAgIDwvc2hhcmQ+IC0tPlxuICAgICAgICA8L2NsdXN0ZXI+XG4gICAgPC9yZW1vdGVfc2VydmVycz5cbjwvY2xpY2tob3VzZT5cbiIKICAgICAgLQogICAgICAgIHR5cGU6IGJpbmQKICAgICAgICBzb3VyY2U6IC4vY2xpY2tob3VzZS91c2Vycy54bWwKICAgICAgICB0YXJnZXQ6IC9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvdXNlcnMueG1sCiAgICAgICAgY29udGVudDogIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIFNlZSBhbHNvIHRoZSBmaWxlcyBpbiB1c2Vycy5kIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4uIC0tPlxuXG4gICAgPCEtLSBQcm9maWxlcyBvZiBzZXR0aW5ncy4gLS0+XG4gICAgPHByb2ZpbGVzPlxuICAgICAgICA8IS0tIERlZmF1bHQgc2V0dGluZ3MuIC0tPlxuICAgICAgICA8ZGVmYXVsdD5cbiAgICAgICAgICAgIDwhLS0gTWF4aW11bSBtZW1vcnkgdXNhZ2UgZm9yIHByb2Nlc3Npbmcgc2luZ2xlIHF1ZXJ5LCBpbiBieXRlcy4gLS0+XG4gICAgICAgICAgICA8bWF4X21lbW9yeV91c2FnZT4xMDAwMDAwMDAwMDwvbWF4X21lbW9yeV91c2FnZT5cblxuICAgICAgICAgICAgPCEtLSBIb3cgdG8gY2hvb3NlIGJldHdlZW4gcmVwbGljYXMgZHVyaW5nIGRpc3RyaWJ1dGVkIHF1ZXJ5IHByb2Nlc3NpbmcuXG4gICAgICAgICAgICAgICAgcmFuZG9tIC0gY2hvb3NlIHJhbmRvbSByZXBsaWNhIGZyb20gc2V0IG9mIHJlcGxpY2FzIHdpdGggbWluaW11bSBudW1iZXIgb2YgZXJyb3JzXG4gICAgICAgICAgICAgICAgbmVhcmVzdF9ob3N0bmFtZSAtIGZyb20gc2V0IG9mIHJlcGxpY2FzIHdpdGggbWluaW11bSBudW1iZXIgb2YgZXJyb3JzLCBjaG9vc2UgcmVwbGljYVxuICAgICAgICAgICAgICAgICAgd2l0aCBtaW5pbXVtIG51bWJlciBvZiBkaWZmZXJlbnQgc3ltYm9scyBiZXR3ZWVuIHJlcGxpY2EncyBob3N0bmFtZSBhbmQgbG9jYWwgaG9zdG5hbWVcbiAgICAgICAgICAgICAgICAgIChIYW1taW5nIGRpc3RhbmNlKS5cbiAgICAgICAgICAgICAgICBpbl9vcmRlciAtIGZpcnN0IGxpdmUgcmVwbGljYSBpcyBjaG9zZW4gaW4gc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgICAgICAgICAgIGZpcnN0X29yX3JhbmRvbSAtIGlmIGZpcnN0IHJlcGxpY2Egb25lIGhhcyBoaWdoZXIgbnVtYmVyIG9mIGVycm9ycywgcGljayBhIHJhbmRvbSBvbmUgZnJvbSByZXBsaWNhcyB3aXRoIG1pbmltdW0gbnVtYmVyIG9mIGVycm9ycy5cbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPGxvYWRfYmFsYW5jaW5nPnJhbmRvbTwvbG9hZF9iYWxhbmNpbmc+XG4gICAgICAgIDwvZGVmYXVsdD5cblxuICAgICAgICA8IS0tIFByb2ZpbGUgdGhhdCBhbGxvd3Mgb25seSByZWFkIHF1ZXJpZXMuIC0tPlxuICAgICAgICA8cmVhZG9ubHk+XG4gICAgICAgICAgICA8cmVhZG9ubHk+MTwvcmVhZG9ubHk+XG4gICAgICAgIDwvcmVhZG9ubHk+XG4gICAgPC9wcm9maWxlcz5cblxuICAgIDwhLS0gVXNlcnMgYW5kIEFDTC4gLS0+XG4gICAgPHVzZXJzPlxuICAgICAgICA8IS0tIElmIHVzZXIgbmFtZSB3YXMgbm90IHNwZWNpZmllZCwgJ2RlZmF1bHQnIHVzZXIgaXMgdXNlZC4gLS0+XG4gICAgICAgIDxkZWZhdWx0PlxuICAgICAgICAgICAgPCEtLSBTZWUgYWxzbyB0aGUgZmlsZXMgaW4gdXNlcnMuZCBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBhc3N3b3JkIGNhbiBiZSBvdmVycmlkZGVuLlxuXG4gICAgICAgICAgICAgICAgUGFzc3dvcmQgY291bGQgYmUgc3BlY2lmaWVkIGluIHBsYWludGV4dCBvciBpbiBTSEEyNTYgKGluIGhleCBmb3JtYXQpLlxuXG4gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBwYXNzd29yZCBpbiBwbGFpbnRleHQgKG5vdCByZWNvbW1lbmRlZCksIHBsYWNlIGl0IGluICdwYXNzd29yZCcgZWxlbWVudC5cbiAgICAgICAgICAgICAgICBFeGFtcGxlOiA8cGFzc3dvcmQ+cXdlcnR5PC9wYXNzd29yZD4uXG4gICAgICAgICAgICAgICAgUGFzc3dvcmQgY291bGQgYmUgZW1wdHkuXG5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IFNIQTI1NiwgcGxhY2UgaXQgaW4gJ3Bhc3N3b3JkX3NoYTI1Nl9oZXgnIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPHBhc3N3b3JkX3NoYTI1Nl9oZXg+NjVlODRiZTMzNTMyZmI3ODRjNDgxMjk2NzVmOWVmZjNhNjgyYjI3MTY4YzBlYTc0NGIyY2Y1OGVlMDIzMzdjNTwvcGFzc3dvcmRfc2hhMjU2X2hleD5cbiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbnMgb2YgU0hBMjU2OiBpbXBvc3NpYmlsaXR5IHRvIGNvbm5lY3QgdG8gQ2xpY2tIb3VzZSB1c2luZyBNeVNRTCBKUyBjbGllbnQgKGFzIG9mIEp1bHkgMjAxOSkuXG5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGRvdWJsZSBTSEExLCBwbGFjZSBpdCBpbiAncGFzc3dvcmRfZG91YmxlX3NoYTFfaGV4JyBlbGVtZW50LlxuICAgICAgICAgICAgICAgIEV4YW1wbGU6IDxwYXNzd29yZF9kb3VibGVfc2hhMV9oZXg+ZTM5NTc5NmQ2NTQ2YjFiNjVkYjlkNjY1Y2Q0M2YwZTg1OGRkNDMwMzwvcGFzc3dvcmRfZG91YmxlX3NoYTFfaGV4PlxuXG4gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIHByZXZpb3VzbHkgZGVmaW5lZCBMREFQIHNlcnZlciAoc2VlICdsZGFwX3NlcnZlcnMnIGluIHRoZSBtYWluIGNvbmZpZykgZm9yIGF1dGhlbnRpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgcGxhY2UgaXRzIG5hbWUgaW4gJ3NlcnZlcicgZWxlbWVudCBpbnNpZGUgJ2xkYXAnIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPGxkYXA+PHNlcnZlcj5teV9sZGFwX3NlcnZlcjwvc2VydmVyPjwvbGRhcD5cblxuICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlciB2aWEgS2VyYmVyb3MgKGFzc3VtaW5nIEtlcmJlcm9zIGlzIGVuYWJsZWQsIHNlZSAna2VyYmVyb3MnIGluIHRoZSBtYWluIGNvbmZpZyksXG4gICAgICAgICAgICAgICAgICBwbGFjZSAna2VyYmVyb3MnIGVsZW1lbnQgaW5zdGVhZCBvZiAncGFzc3dvcmQnIChhbmQgc2ltaWxhcikgZWxlbWVudHMuXG4gICAgICAgICAgICAgICAgVGhlIG5hbWUgcGFydCBvZiB0aGUgY2Fub25pY2FsIHByaW5jaXBhbCBuYW1lIG9mIHRoZSBpbml0aWF0b3IgbXVzdCBtYXRjaCB0aGUgdXNlciBuYW1lIGZvciBhdXRoZW50aWNhdGlvbiB0byBzdWNjZWVkLlxuICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwbGFjZSAncmVhbG0nIGVsZW1lbnQgaW5zaWRlICdrZXJiZXJvcycgZWxlbWVudCB0byBmdXJ0aGVyIHJlc3RyaWN0IGF1dGhlbnRpY2F0aW9uIHRvIG9ubHkgdGhvc2UgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgIHdob3NlIGluaXRpYXRvcidzIHJlYWxtIG1hdGNoZXMgaXQuXG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPGtlcmJlcm9zIC8+XG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPGtlcmJlcm9zPjxyZWFsbT5FWEFNUExFLkNPTTwvcmVhbG0+PC9rZXJiZXJvcz5cblxuICAgICAgICAgICAgICAgIEhvdyB0byBnZW5lcmF0ZSBkZWNlbnQgcGFzc3dvcmQ6XG4gICAgICAgICAgICAgICAgRXhlY3V0ZTogUEFTU1dPUkQ9JChiYXNlNjQgPCAvZGV2L3VyYW5kb20gfCBoZWFkIC1jOCk7IGVjaG8gXCIkUEFTU1dPUkRcIjsgZWNobyAtbiBcIiRQQVNTV09SRFwiIHwgc2hhMjU2c3VtIHwgdHIgLWQgJy0nXG4gICAgICAgICAgICAgICAgSW4gZmlyc3QgbGluZSB3aWxsIGJlIHBhc3N3b3JkIGFuZCBpbiBzZWNvbmQgLSBjb3JyZXNwb25kaW5nIFNIQTI1Ni5cblxuICAgICAgICAgICAgICAgIEhvdyB0byBnZW5lcmF0ZSBkb3VibGUgU0hBMTpcbiAgICAgICAgICAgICAgICBFeGVjdXRlOiBQQVNTV09SRD0kKGJhc2U2NCA8IC9kZXYvdXJhbmRvbSB8IGhlYWQgLWM4KTsgZWNobyBcIiRQQVNTV09SRFwiOyBlY2hvIC1uIFwiJFBBU1NXT1JEXCIgfCBzaGExc3VtIHwgdHIgLWQgJy0nIHwgeHhkIC1yIC1wIHwgc2hhMXN1bSB8IHRyIC1kICctJ1xuICAgICAgICAgICAgICAgIEluIGZpcnN0IGxpbmUgd2lsbCBiZSBwYXNzd29yZCBhbmQgaW4gc2Vjb25kIC0gY29ycmVzcG9uZGluZyBkb3VibGUgU0hBMS5cbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPHBhc3N3b3JkPjwvcGFzc3dvcmQ+XG5cbiAgICAgICAgICAgIDwhLS0gTGlzdCBvZiBuZXR3b3JrcyB3aXRoIG9wZW4gYWNjZXNzLlxuXG4gICAgICAgICAgICAgICAgVG8gb3BlbiBhY2Nlc3MgZnJvbSBldmVyeXdoZXJlLCBzcGVjaWZ5OlxuICAgICAgICAgICAgICAgICAgICA8aXA+OjovMDwvaXA+XG5cbiAgICAgICAgICAgICAgICBUbyBvcGVuIGFjY2VzcyBvbmx5IGZyb20gbG9jYWxob3N0LCBzcGVjaWZ5OlxuICAgICAgICAgICAgICAgICAgICA8aXA+OjoxPC9pcD5cbiAgICAgICAgICAgICAgICAgICAgPGlwPjEyNy4wLjAuMTwvaXA+XG5cbiAgICAgICAgICAgICAgICBFYWNoIGVsZW1lbnQgb2YgbGlzdCBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6XG4gICAgICAgICAgICAgICAgPGlwPiBJUC1hZGRyZXNzIG9yIG5ldHdvcmsgbWFzay4gRXhhbXBsZXM6IDIxMy4xODAuMjA0LjMgb3IgMTAuMC4wLjEvOCBvciAxMC4wLjAuMS8yNTUuMjU1LjI1NS4wXG4gICAgICAgICAgICAgICAgICAgIDJhMDI6NmI4OjozIG9yIDJhMDI6NmI4OjozLzY0IG9yIDJhMDI6NmI4OjozL2ZmZmY6ZmZmZjpmZmZmOmZmZmY6Oi5cbiAgICAgICAgICAgICAgICA8aG9zdD4gSG9zdG5hbWUuIEV4YW1wbGU6IHNlcnZlcjAxLmNsaWNraG91c2UuY29tLlxuICAgICAgICAgICAgICAgICAgICBUbyBjaGVjayBhY2Nlc3MsIEROUyBxdWVyeSBpcyBwZXJmb3JtZWQsIGFuZCBhbGwgcmVjZWl2ZWQgYWRkcmVzc2VzIGNvbXBhcmVkIHRvIHBlZXIgYWRkcmVzcy5cbiAgICAgICAgICAgICAgICA8aG9zdF9yZWdleHA+IFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaG9zdCBuYW1lcy4gRXhhbXBsZSwgXnNlcnZlclxcZFxcZC1cXGRcXGQtXFxkXFwuY2xpY2tob3VzZVxcLmNvbSRcbiAgICAgICAgICAgICAgICAgICAgVG8gY2hlY2sgYWNjZXNzLCBETlMgUFRSIHF1ZXJ5IGlzIHBlcmZvcm1lZCBmb3IgcGVlciBhZGRyZXNzIGFuZCB0aGVuIHJlZ2V4cCBpcyBhcHBsaWVkLlxuICAgICAgICAgICAgICAgICAgICBUaGVuLCBmb3IgcmVzdWx0IG9mIFBUUiBxdWVyeSwgYW5vdGhlciBETlMgcXVlcnkgaXMgcGVyZm9ybWVkIGFuZCBhbGwgcmVjZWl2ZWQgYWRkcmVzc2VzIGNvbXBhcmVkIHRvIHBlZXIgYWRkcmVzcy5cbiAgICAgICAgICAgICAgICAgICAgU3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCByZWdleHAgaXMgZW5kcyB3aXRoICRcbiAgICAgICAgICAgICAgICBBbGwgcmVzdWx0cyBvZiBETlMgcmVxdWVzdHMgYXJlIGNhY2hlZCB0aWxsIHNlcnZlciByZXN0YXJ0LlxuICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICA8bmV0d29ya3M+XG4gICAgICAgICAgICAgICAgPGlwPjo6LzA8L2lwPlxuICAgICAgICAgICAgPC9uZXR3b3Jrcz5cblxuICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBwcm9maWxlIGZvciB1c2VyLiAtLT5cbiAgICAgICAgICAgIDxwcm9maWxlPmRlZmF1bHQ8L3Byb2ZpbGU+XG5cbiAgICAgICAgICAgIDwhLS0gUXVvdGEgZm9yIHVzZXIuIC0tPlxuICAgICAgICAgICAgPHF1b3RhPmRlZmF1bHQ8L3F1b3RhPlxuXG4gICAgICAgICAgICA8IS0tIFVzZXIgY2FuIGNyZWF0ZSBvdGhlciB1c2VycyBhbmQgZ3JhbnQgcmlnaHRzIHRvIHRoZW0uIC0tPlxuICAgICAgICAgICAgPCEtLSA8YWNjZXNzX21hbmFnZW1lbnQ+MTwvYWNjZXNzX21hbmFnZW1lbnQ+IC0tPlxuICAgICAgICA8L2RlZmF1bHQ+XG4gICAgPC91c2Vycz5cblxuICAgIDwhLS0gUXVvdGFzLiAtLT5cbiAgICA8cXVvdGFzPlxuICAgICAgICA8IS0tIE5hbWUgb2YgcXVvdGEuIC0tPlxuICAgICAgICA8ZGVmYXVsdD5cbiAgICAgICAgICAgIDwhLS0gTGltaXRzIGZvciB0aW1lIGludGVydmFsLiBZb3UgY291bGQgc3BlY2lmeSBtYW55IGludGVydmFscyB3aXRoIGRpZmZlcmVudCBsaW1pdHMuIC0tPlxuICAgICAgICAgICAgPGludGVydmFsPlxuICAgICAgICAgICAgICAgIDwhLS0gTGVuZ3RoIG9mIGludGVydmFsLiAtLT5cbiAgICAgICAgICAgICAgICA8ZHVyYXRpb24+MzYwMDwvZHVyYXRpb24+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE5vIGxpbWl0cy4gSnVzdCBjYWxjdWxhdGUgcmVzb3VyY2UgdXNhZ2UgZm9yIHRpbWUgaW50ZXJ2YWwuIC0tPlxuICAgICAgICAgICAgICAgIDxxdWVyaWVzPjA8L3F1ZXJpZXM+XG4gICAgICAgICAgICAgICAgPGVycm9ycz4wPC9lcnJvcnM+XG4gICAgICAgICAgICAgICAgPHJlc3VsdF9yb3dzPjA8L3Jlc3VsdF9yb3dzPlxuICAgICAgICAgICAgICAgIDxyZWFkX3Jvd3M+MDwvcmVhZF9yb3dzPlxuICAgICAgICAgICAgICAgIDxleGVjdXRpb25fdGltZT4wPC9leGVjdXRpb25fdGltZT5cbiAgICAgICAgICAgIDwvaW50ZXJ2YWw+XG4gICAgICAgIDwvZGVmYXVsdD5cbiAgICA8L3F1b3Rhcz5cbjwvY2xpY2tob3VzZT5cbiIKICAgICAgLQogICAgICAgIHR5cGU6IGJpbmQKICAgICAgICBzb3VyY2U6IC4vY2xpY2tob3VzZS9jb25maWcueG1sCiAgICAgICAgdGFyZ2V0OiAvZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy54bWwKICAgICAgICBjb250ZW50OiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjxjbGlja2hvdXNlPlxuICA8bWF4X2Nvbm5lY3Rpb25zPjQwOTY8L21heF9jb25uZWN0aW9ucz5cbiAgPGtlZXBfYWxpdmVfdGltZW91dD4zPC9rZWVwX2FsaXZlX3RpbWVvdXQ+XG4gIDxtYXhfY29uY3VycmVudF9xdWVyaWVzPjEwMDwvbWF4X2NvbmN1cnJlbnRfcXVlcmllcz5cbiAgPG1hcmtfY2FjaGVfc2l6ZT41MzY4NzA5MTIwPC9tYXJrX2NhY2hlX3NpemU+XG4gIDxtbWFwX2NhY2hlX3NpemU+MTAwMDwvbW1hcF9jYWNoZV9zaXplPlxuICA8Y29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9zaXplPjEzNDIxNzcyODwvY29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9zaXplPlxuICA8Y29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9lbGVtZW50c19zaXplPjEwMDAwPC9jb21waWxlZF9leHByZXNzaW9uX2NhY2hlX2VsZW1lbnRzX3NpemU+XG4gIDxjdXN0b21fc2V0dGluZ3NfcHJlZml4ZXM+PC9jdXN0b21fc2V0dGluZ3NfcHJlZml4ZXM+XG4gIDxkaWN0aW9uYXJpZXNfY29uZmlnPipfZGljdGlvbmFyeS54bWw8L2RpY3Rpb25hcmllc19jb25maWc+XG4gIDx1c2VyX2RlZmluZWRfZXhlY3V0YWJsZV9mdW5jdGlvbnNfY29uZmlnPipmdW5jdGlvbi54bWw8L3VzZXJfZGVmaW5lZF9leGVjdXRhYmxlX2Z1bmN0aW9uc19jb25maWc+XG4gIDx1c2VyX3NjcmlwdHNfcGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy88L3VzZXJfc2NyaXB0c19wYXRoPlxuICA8aHR0cF9wb3J0PjgxMjM8L2h0dHBfcG9ydD5cbiAgPHRjcF9wb3J0PjkwMDA8L3RjcF9wb3J0PlxuICA8bXlzcWxfcG9ydD45MDA0PC9teXNxbF9wb3J0PlxuICA8cG9zdGdyZXNxbF9wb3J0PjkwMDU8L3Bvc3RncmVzcWxfcG9ydD5cbiAgPGludGVyc2VydmVyX2h0dHBfcG9ydD45MDA5PC9pbnRlcnNlcnZlcl9odHRwX3BvcnQ+XG4gIDxsb2dnZXI+XG4gICAgPGxldmVsPmluZm9ybWF0aW9uPC9sZXZlbD5cbiAgICA8Zm9ybWF0dGluZz5cbiAgICAgIDx0eXBlPmpzb248L3R5cGU+XG4gICAgPC9mb3JtYXR0aW5nPlxuICA8L2xvZ2dlcj5cbiAgPG1hY3Jvcz5cbiAgICA8c2hhcmQ+MDE8L3NoYXJkPlxuICAgIDxyZXBsaWNhPmV4YW1wbGUwMS0wMS0xPC9yZXBsaWNhPlxuICA8L21hY3Jvcz5cbiAgPHByb21ldGhldXM+XG4gICAgPGVuZHBvaW50Pi9tZXRyaWNzPC9lbmRwb2ludD5cbiAgICA8cG9ydD45MzYzPC9wb3J0PlxuICAgIDxtZXRyaWNzPnRydWU8L21ldHJpY3M+XG4gICAgPGV2ZW50cz50cnVlPC9ldmVudHM+XG4gICAgPGFzeW5jaHJvbm91c19tZXRyaWNzPnRydWU8L2FzeW5jaHJvbm91c19tZXRyaWNzPlxuICAgIDxzdGF0dXNfaW5mbz50cnVlPC9zdGF0dXNfaW5mbz5cbiAgPC9wcm9tZXRoZXVzPlxuICA8b3BlbnRlbGVtZXRyeV9zcGFuX2xvZz5cbiAgICA8ZW5naW5lPmVuZ2luZSBNZXJnZVRyZWVcbiAgICAgICAgICAgIHBhcnRpdGlvbiBieSB0b1lZWVlNTShmaW5pc2hfZGF0ZSlcbiAgICAgICAgICAgIG9yZGVyIGJ5IChmaW5pc2hfZGF0ZSwgZmluaXNoX3RpbWVfdXMsIHRyYWNlX2lkKTwvZW5naW5lPlxuICA8L29wZW50ZWxlbWV0cnlfc3Bhbl9sb2c+XG4gIDxxdWVyeV9tYXNraW5nX3J1bGVzPlxuICAgIDxydWxlPlxuICAgICAgPG5hbWU+aGlkZSBlbmNyeXB0L2RlY3J5cHQgYXJndW1lbnRzPC9uYW1lPlxuICAgICAgPHJlZ2V4cD4oKD86YWVzXyk/KD86ZW5jcnlwdHxkZWNyeXB0KSg/Ol9teXNxbCk/KVxccypcXChcXHMqKD86Jyg/OlxcXFwnfC4pKyd8Lio/KVxccypcXCk8L3JlZ2V4cD5cbiAgICAgIDxyZXBsYWNlPlxcMSg/Pz8pPC9yZXBsYWNlPlxuICAgIDwvcnVsZT5cbiAgPC9xdWVyeV9tYXNraW5nX3J1bGVzPlxuICA8c2VuZF9jcmFzaF9yZXBvcnRzPlxuICAgIDxlbmFibGVkPmZhbHNlPC9lbmFibGVkPlxuICAgIDxhbm9ueW1pemU+ZmFsc2U8L2Fub255bWl6ZT5cbiAgICA8ZW5kcG9pbnQ+aHR0cHM6Ly82ZjMzMDM0Y2ZlNjg0ZGQ3YTNhYjk4NzVlNTdiMWM4ZEBvMzg4ODcwLmluZ2VzdC5zZW50cnkuaW8vNTIyNjI3NzwvZW5kcG9pbnQ+XG4gIDwvc2VuZF9jcmFzaF9yZXBvcnRzPlxuICA8bWVyZ2VfdHJlZV9tZXRhZGF0YV9jYWNoZT5cbiAgICA8bHJ1X2NhY2hlX3NpemU+MjY4NDM1NDU2PC9scnVfY2FjaGVfc2l6ZT5cbiAgICA8Y29udGludWVfaWZfY29ycnVwdGVkPnRydWU8L2NvbnRpbnVlX2lmX2NvcnJ1cHRlZD5cbiAgPC9tZXJnZV90cmVlX21ldGFkYXRhX2NhY2hlPlxuICA8dXNlcl9kaXJlY3Rvcmllcz5cbiAgICA8dXNlcnNfeG1sPlxuICAgICAgICA8IS0tIFBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIHdpdGggcHJlZGVmaW5lZCB1c2Vycy4gLS0+XG4gICAgICAgIDxwYXRoPnVzZXJzLnhtbDwvcGF0aD5cbiAgICA8L3VzZXJzX3htbD5cbiAgICA8bG9jYWxfZGlyZWN0b3J5PlxuICAgICAgICA8IS0tIFBhdGggdG8gZm9sZGVyIHdoZXJlIHVzZXJzIGNyZWF0ZWQgYnkgU1FMIGNvbW1hbmRzIGFyZSBzdG9yZWQuIC0tPlxuICAgICAgICA8cGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL2FjY2Vzcy88L3BhdGg+XG4gICAgPC9sb2NhbF9kaXJlY3Rvcnk+XG4gIDwvdXNlcl9kaXJlY3Rvcmllcz5cbiAgPGRlZmF1bHRfcHJvZmlsZT5kZWZhdWx0PC9kZWZhdWx0X3Byb2ZpbGU+XG4gICAgPGRpc3RyaWJ1dGVkX2RkbD5cbiAgICAgICAgPCEtLSBQYXRoIGluIFpvb0tlZXBlciB0byBxdWV1ZSB3aXRoIERETCBxdWVyaWVzIC0tPlxuICAgICAgICA8cGF0aD4vY2xpY2tob3VzZS90YXNrX3F1ZXVlL2RkbDwvcGF0aD5cbiAgICA8L2Rpc3RyaWJ1dGVkX2RkbD5cbjwvY2xpY2tob3VzZT5cbiIKICBzaWdub3o6CiAgICBpbWFnZTogJ3NpZ25vei9zaWdub3o6djAuOTcuMScKICAgIGRlcGVuZHNfb246CiAgICAgIGNsaWNraG91c2U6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgc2NoZW1hLW1pZ3JhdG9yLXN5bmM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICAgIGNvbW1hbmQ6CiAgICAgIC0gJy0tY29uZmlnPS9yb290L2NvbmZpZy9wcm9tZXRoZXVzLnltbCcKICAgIHZvbHVtZXM6CiAgICAgIC0KICAgICAgICB0eXBlOiBiaW5kCiAgICAgICAgc291cmNlOiAuL3Byb21ldGhldXMueW1sCiAgICAgICAgdGFyZ2V0OiAvcm9vdC9jb25maWcvcHJvbWV0aGV1cy55bWwKICAgICAgICBjb250ZW50OiAiIyBteSBnbG9iYWwgY29uZmlnXG5nbG9iYWw6XG4gIHNjcmFwZV9pbnRlcnZhbDogICAgIDVzICMgU2V0IHRoZSBzY3JhcGUgaW50ZXJ2YWwgdG8gZXZlcnkgMTUgc2Vjb25kcy4gRGVmYXVsdCBpcyBldmVyeSAxIG1pbnV0ZS5cbiAgZXZhbHVhdGlvbl9pbnRlcnZhbDogMTVzICMgRXZhbHVhdGUgcnVsZXMgZXZlcnkgMTUgc2Vjb25kcy4gVGhlIGRlZmF1bHQgaXMgZXZlcnkgMSBtaW51dGUuXG4gICMgc2NyYXBlX3RpbWVvdXQgaXMgc2V0IHRvIHRoZSBnbG9iYWwgZGVmYXVsdCAoMTBzKS5cblxuIyBBbGVydG1hbmFnZXIgY29uZmlndXJhdGlvblxuYWxlcnRpbmc6XG4gIGFsZXJ0bWFuYWdlcnM6XG4gIC0gc3RhdGljX2NvbmZpZ3M6XG4gICAgLSB0YXJnZXRzOlxuICAgICAgLSBhbGVydG1hbmFnZXI6OTA5M1xuXG4jIExvYWQgcnVsZXMgb25jZSBhbmQgcGVyaW9kaWNhbGx5IGV2YWx1YXRlIHRoZW0gYWNjb3JkaW5nIHRvIHRoZSBnbG9iYWwgJ2V2YWx1YXRpb25faW50ZXJ2YWwnLlxucnVsZV9maWxlczogW11cbiAgIyAtIFwiZmlyc3RfcnVsZXMueW1sXCJcbiAgIyAtIFwic2Vjb25kX3J1bGVzLnltbFwiXG4gICMgLSAnYWxlcnRzLnltbCdcblxuIyBBIHNjcmFwZSBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgZXhhY3RseSBvbmUgZW5kcG9pbnQgdG8gc2NyYXBlOlxuIyBIZXJlIGl0J3MgUHJvbWV0aGV1cyBpdHNlbGYuXG5zY3JhcGVfY29uZmlnczogW11cblxucmVtb3RlX3JlYWQ6XG4gIC0gdXJsOiB0Y3A6Ly9jbGlja2hvdXNlOjkwMDAvc2lnbm96X21ldHJpY3NcbiIKICAgICAgLQogICAgICAgIHR5cGU6IHZvbHVtZQogICAgICAgIHNvdXJjZTogc3FsaXRlCiAgICAgICAgdGFyZ2V0OiAvdmFyL2xpYi9zaWdub3ovCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX1VSTF9TSUdOT1pfODA4MAogICAgICAtICdTSUdOT1pfSldUX1NFQ1JFVD0ke1NFUlZJQ0VfUkVBTEJBU0U2NF9KV1RTRUNSRVR9JwogICAgICAtICdTSUdOT1pfVEVMRU1FVFJZU1RPUkVfQ0xJQ0tIT1VTRV9EU049dGNwOi8vY2xpY2tob3VzZTo5MDAwJwogICAgICAtIFNJR05PWl9TUUxTVE9SRV9TUUxJVEVfUEFUSD0vdmFyL2xpYi9zaWdub3ovc2lnbm96LmRiCiAgICAgIC0gREFTSEJPQVJEU19QQVRIPS9yb290L2NvbmZpZy9kYXNoYm9hcmRzCiAgICAgIC0gU1RPUkFHRT1jbGlja2hvdXNlCiAgICAgIC0gR09ERUJVRz1uZXRkbnM9Z28KICAgICAgLSBERVBMT1lNRU5UX1RZUEU9ZG9ja2VyLXN0YW5kYWxvbmUtYW1kCiAgICAgIC0gJ1NJR05PWl9TVEFUU1JFUE9SVEVSX0VOQUJMRUQ9JHtTSUdOT1pfU1RBVFNSRVBPUlRFUl9FTkFCTEVEOi10cnVlfScKICAgICAgLSAnU0lHTk9aX0VNQUlMSU5HX0VOQUJMRUQ9JHtTSUdOT1pfRU1BSUxJTkdfRU5BQkxFRDotZmFsc2V9JwogICAgICAtICdTSUdOT1pfRU1BSUxJTkdfU01UUF9BRERSRVNTPSR7U0lHTk9aX0VNQUlMSU5HX1NNVFBfQUREUkVTU30nCiAgICAgIC0gJ1NJR05PWl9FTUFJTElOR19TTVRQX0ZST009JHtTSUdOT1pfRU1BSUxJTkdfU01UUF9GUk9NfScKICAgICAgLSAnU0lHTk9aX0VNQUlMSU5HX1NNVFBfQVVUSF9VU0VSTkFNRT0ke1NJR05PWl9FTUFJTElOR19TTVRQX0FVVEhfVVNFUk5BTUV9JwogICAgICAtICdTSUdOT1pfRU1BSUxJTkdfU01UUF9BVVRIX1BBU1NXT1JEPSR7U0lHTk9aX0VNQUlMSU5HX1NNVFBfQVVUSF9QQVNTV09SRH0nCiAgICAgIC0gU0lHTk9aX0FMRVJUTUFOQUdFUl9QUk9WSURFUj1zaWdub3oKICAgICAgLSAnU0lHTk9aX0FMRVJUTUFOQUdFUl9TSUdOT1pfR0xPQkFMX1NNVFBfX0FVVEhfX1BBU1NXT1JEPSR7U0lHTk9aX0FMRVJUTUFOQUdFUl9TSUdOT1pfR0xPQkFMX1NNVFBfX0FVVEhfX1BBU1NXT1JEfScKICAgICAgLSAnU0lHTk9aX0FMRVJUTUFOQUdFUl9TSUdOT1pfR0xPQkFMX1NNVFBfX0FVVEhfX1VTRVJOQU1FPSR7U0lHTk9aX0FMRVJUTUFOQUdFUl9TSUdOT1pfR0xPQkFMX1NNVFBfX0FVVEhfX1VTRVJOQU1FfScKICAgICAgLSAnU0lHTk9aX0FMRVJUTUFOQUdFUl9TSUdOT1pfR0xPQkFMX1NNVFBfX0ZST009JHtTSUdOT1pfQUxFUlRNQU5BR0VSX1NJR05PWl9HTE9CQUxfU01UUF9fRlJPTX0nCiAgICAgIC0gJ1NJR05PWl9BTEVSVE1BTkFHRVJfU0lHTk9aX0dMT0JBTF9TTVRQX19TTUFSVEhPU1Q9JHtTSUdOT1pfQUxFUlRNQU5BR0VSX1NJR05PWl9HTE9CQUxfU01UUF9fU01BUlRIT1NUfScKICAgICAgLSBET1RfTUVUUklDU19FTkFCRUxEPXRydWUKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLS1zcGlkZXInCiAgICAgICAgLSAnLXEnCiAgICAgICAgLSAnbG9jYWxob3N0OjgwODAvYXBpL3YxL2hlYWx0aCcKICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiAzCiAgb3RlbC1jb2xsZWN0b3I6CiAgICBpbWFnZTogJ3NpZ25vei9zaWdub3otb3RlbC1jb2xsZWN0b3I6djAuMTI5LjcnCiAgICBkZXBlbmRzX29uOgogICAgICBjbGlja2hvdXNlOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHNjaGVtYS1taWdyYXRvci1zeW5jOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICAgIHNpZ25vejoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgbG9nZ2luZzoKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtc2l6ZTogNTBtCiAgICAgICAgbWF4LWZpbGU6ICczJwogICAgY29tbWFuZDoKICAgICAgLSAnLS1jb25maWc9L2V0Yy9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbCcKICAgICAgLSAnLS1tYW5hZ2VyLWNvbmZpZz0vZXRjL21hbmFnZXItY29uZmlnLnlhbWwnCiAgICAgIC0gJy0tY29weS1wYXRoPS92YXIvdG1wL2NvbGxlY3Rvci1jb25maWcueWFtbCcKICAgICAgLSAnLS1mZWF0dXJlLWdhdGVzPS1wa2cudHJhbnNsYXRvci5wcm9tZXRoZXVzLk5vcm1hbGl6ZU5hbWUnCiAgICB2b2x1bWVzOgogICAgICAtCiAgICAgICAgdHlwZTogYmluZAogICAgICAgIHNvdXJjZTogLi9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbAogICAgICAgIHRhcmdldDogL2V0Yy9vdGVsLWNvbGxlY3Rvci1jb25maWcueWFtbAogICAgICAgIGNvbnRlbnQ6ICJyZWNlaXZlcnM6XG4gIG90bHA6XG4gICAgcHJvdG9jb2xzOlxuICAgICAgZ3JwYzpcbiAgICAgICAgZW5kcG9pbnQ6IDAuMC4wLjA6NDMxN1xuICAgICAgaHR0cDpcbiAgICAgICAgZW5kcG9pbnQ6IDAuMC4wLjA6NDMxOFxuICBwcm9tZXRoZXVzOlxuICAgIGNvbmZpZzpcbiAgICAgIGdsb2JhbDpcbiAgICAgICAgc2NyYXBlX2ludGVydmFsOiA2MHNcbiAgICAgIHNjcmFwZV9jb25maWdzOlxuICAgICAgICAtIGpvYl9uYW1lOiBvdGVsLWNvbGxlY3RvclxuICAgICAgICAgIHN0YXRpY19jb25maWdzOlxuICAgICAgICAgIC0gdGFyZ2V0czpcbiAgICAgICAgICAgICAgLSBsb2NhbGhvc3Q6ODg4OFxuICAgICAgICAgICAgbGFiZWxzOlxuICAgICAgICAgICAgICBqb2JfbmFtZTogb3RlbC1jb2xsZWN0b3JcbnByb2Nlc3NvcnM6XG4gIGJhdGNoOlxuICAgIHNlbmRfYmF0Y2hfc2l6ZTogMTAwMDBcbiAgICBzZW5kX2JhdGNoX21heF9zaXplOiAxMTAwMFxuICAgIHRpbWVvdXQ6IDEwc1xuICByZXNvdXJjZWRldGVjdGlvbjpcbiAgICAjIFVzaW5nIE9URUxfUkVTT1VSQ0VfQVRUUklCVVRFUyBlbnZ2YXIsIGVudiBkZXRlY3RvciBhZGRzIGN1c3RvbSBsYWJlbHMuXG4gICAgZGV0ZWN0b3JzOiBbZW52LCBzeXN0ZW1dXG4gICAgdGltZW91dDogMnNcbiAgc2lnbm96c3Bhbm1ldHJpY3MvZGVsdGE6XG4gICAgbWV0cmljc19leHBvcnRlcjogc2lnbm96Y2xpY2tob3VzZW1ldHJpY3NcbiAgICBtZXRyaWNzX2ZsdXNoX2ludGVydmFsOiA2MHNcbiAgICBsYXRlbmN5X2hpc3RvZ3JhbV9idWNrZXRzOiBbMTAwdXMsIDFtcywgMm1zLCA2bXMsIDEwbXMsIDUwbXMsIDEwMG1zLCAyNTBtcywgNTAwbXMsIDEwMDBtcywgMTQwMG1zLCAyMDAwbXMsIDVzLCAxMHMsIDIwcywgNDBzLCA2MHMgXVxuICAgIGRpbWVuc2lvbnNfY2FjaGVfc2l6ZTogMTAwMDAwXG4gICAgYWdncmVnYXRpb25fdGVtcG9yYWxpdHk6IEFHR1JFR0FUSU9OX1RFTVBPUkFMSVRZX0RFTFRBXG4gICAgZW5hYmxlX2V4cF9oaXN0b2dyYW06IHRydWVcbiAgICBkaW1lbnNpb25zOlxuICAgICAgLSBuYW1lOiBzZXJ2aWNlLm5hbWVzcGFjZVxuICAgICAgICBkZWZhdWx0OiBkZWZhdWx0XG4gICAgICAtIG5hbWU6IGRlcGxveW1lbnQuZW52aXJvbm1lbnRcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdFxuICAgICAgIyBUaGlzIGlzIGFkZGVkIHRvIGVuc3VyZSB0aGUgdW5pcXVlbmVzcyBvZiB0aGUgdGltZXNlcmllc1xuICAgICAgIyBPdGhlcndpc2UsIGlkZW50aWNhbCB0aW1lc2VyaWVzIHByb2R1Y2VkIGJ5IG11bHRpcGxlIHJlcGxpY2FzIG9mXG4gICAgICAjIGNvbGxlY3RvcnMgcmVzdWx0IGluIGluY29ycmVjdCBBUE0gbWV0cmljc1xuICAgICAgLSBuYW1lOiBzaWdub3ouY29sbGVjdG9yLmlkXG4gICAgICAtIG5hbWU6IHNlcnZpY2UudmVyc2lvblxuICAgICAgLSBuYW1lOiBicm93c2VyLnBsYXRmb3JtXG4gICAgICAtIG5hbWU6IGJyb3dzZXIubW9iaWxlXG4gICAgICAtIG5hbWU6IGs4cy5jbHVzdGVyLm5hbWVcbiAgICAgIC0gbmFtZTogazhzLm5vZGUubmFtZVxuICAgICAgLSBuYW1lOiBrOHMubmFtZXNwYWNlLm5hbWVcbiAgICAgIC0gbmFtZTogaG9zdC5uYW1lXG4gICAgICAtIG5hbWU6IGhvc3QudHlwZVxuICAgICAgLSBuYW1lOiBjb250YWluZXIubmFtZVxuZXh0ZW5zaW9uczpcbiAgaGVhbHRoX2NoZWNrOlxuICAgIGVuZHBvaW50OiAwLjAuMC4wOjEzMTMzXG4gIHBwcm9mOlxuICAgIGVuZHBvaW50OiAwLjAuMC4wOjE3NzdcbmV4cG9ydGVyczpcbiAgY2xpY2tob3VzZXRyYWNlczpcbiAgICBkYXRhc291cmNlOiB0Y3A6Ly9jbGlja2hvdXNlOjkwMDAvc2lnbm96X3RyYWNlc1xuICAgIGxvd19jYXJkaW5hbF9leGNlcHRpb25fZ3JvdXBpbmc6ICR7ZW52OkxPV19DQVJESU5BTF9FWENFUFRJT05fR1JPVVBJTkd9XG4gICAgdXNlX25ld19zY2hlbWE6IHRydWVcbiAgc2lnbm96Y2xpY2tob3VzZW1ldHJpY3M6XG4gICAgZHNuOiB0Y3A6Ly9jbGlja2hvdXNlOjkwMDAvc2lnbm96X21ldHJpY3NcbiAgY2xpY2tob3VzZWxvZ3NleHBvcnRlcjpcbiAgICBkc246IHRjcDovL2NsaWNraG91c2U6OTAwMC9zaWdub3pfbG9nc1xuICAgIHRpbWVvdXQ6IDEwc1xuICAgIHVzZV9uZXdfc2NoZW1hOiB0cnVlXG5zZXJ2aWNlOlxuICB0ZWxlbWV0cnk6XG4gICAgbG9nczpcbiAgICAgIGVuY29kaW5nOiBqc29uXG4gIGV4dGVuc2lvbnM6XG4gICAgLSBoZWFsdGhfY2hlY2tcbiAgICAtIHBwcm9mXG4gIHBpcGVsaW5lczpcbiAgICB0cmFjZXM6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW3NpZ25venNwYW5tZXRyaWNzL2RlbHRhLCBiYXRjaF1cbiAgICAgIGV4cG9ydGVyczogW2NsaWNraG91c2V0cmFjZXNdXG4gICAgbWV0cmljczpcbiAgICAgIHJlY2VpdmVyczogW290bHBdXG4gICAgICBwcm9jZXNzb3JzOiBbYmF0Y2hdXG4gICAgICBleHBvcnRlcnM6IFtzaWdub3pjbGlja2hvdXNlbWV0cmljc11cbiAgICBtZXRyaWNzL3Byb21ldGhldXM6XG4gICAgICByZWNlaXZlcnM6IFtwcm9tZXRoZXVzXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbc2lnbm96Y2xpY2tob3VzZW1ldHJpY3NdXG4gICAgbG9nczpcbiAgICAgIHJlY2VpdmVyczogW290bHBdXG4gICAgICBwcm9jZXNzb3JzOiBbYmF0Y2hdXG4gICAgICBleHBvcnRlcnM6IFtjbGlja2hvdXNlbG9nc2V4cG9ydGVyXSIKICAgICAgLQogICAgICAgIHR5cGU6IGJpbmQKICAgICAgICBzb3VyY2U6IC4vb3RlbC1jb2xsZWN0b3Itb3BhbXAtY29uZmlnLnlhbWwKICAgICAgICB0YXJnZXQ6IC9ldGMvbWFuYWdlci1jb25maWcueWFtbAogICAgICAgIGNvbnRlbnQ6ICJzZXJ2ZXJfZW5kcG9pbnQ6IHdzOi8vc2lnbm96OjQzMjAvdjEvb3BhbXBcbiIKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfVVJMX09URUxDT0xMRUNUT1JIVFRQXzQzMTgKICAgICAgLSAnT1RFTF9SRVNPVVJDRV9BVFRSSUJVVEVTPWhvc3QubmFtZT1zaWdub3otaG9zdCxvcy50eXBlPWxpbnV4JwogICAgICAtIExPV19DQVJESU5BTF9FWENFUFRJT05fR1JPVVBJTkc9ZmFsc2UKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OiAnYmFzaCAtYyAiZXhlYyA2PD4gL2Rldi90Y3AvbG9jYWxob3N0LzEzMTMzIicKICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiAzCiAgc2NoZW1hLW1pZ3JhdG9yLXN5bmM6CiAgICBpbWFnZTogJ3NpZ25vei9zaWdub3otc2NoZW1hLW1pZ3JhdG9yOnYwLjEyOS43JwogICAgY29tbWFuZDoKICAgICAgLSBzeW5jCiAgICAgIC0gJy0tZHNuPXRjcDovL2NsaWNraG91c2U6OTAwMCcKICAgICAgLSAnLS11cD0nCiAgICBkZXBlbmRzX29uOgogICAgICBjbGlja2hvdXNlOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICBzY2hlbWEtbWlncmF0b3ItYXN5bmM6CiAgICBpbWFnZTogJ3NpZ25vei9zaWdub3otc2NoZW1hLW1pZ3JhdG9yOnYwLjEyOS43JwogICAgZGVwZW5kc19vbjoKICAgICAgY2xpY2tob3VzZToKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBzY2hlbWEtbWlncmF0b3Itc3luYzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgcmVzdGFydDogb24tZmFpbHVyZQogICAgZXhjbHVkZV9mcm9tX2hjOiB0cnVlCiAgICBsb2dnaW5nOgogICAgICBvcHRpb25zOgogICAgICAgIG1heC1zaXplOiA1MG0KICAgICAgICBtYXgtZmlsZTogJzMnCiAgICBjb21tYW5kOgogICAgICAtIGFzeW5jCiAgICAgIC0gJy0tZHNuPXRjcDovL2NsaWNraG91c2U6OTAwMCcKICAgICAgLSAnLS11cD0nCg==", + "tags": [ + "telemetry", + "server", + "applications", + "interface", + "logs", + "monitoring", + "traces", + "metrics" + ], + "category": null, + "logo": "svgs/signoz.svg", + "minversion": "0.0.0", + "port": "8080" + }, "slash": { "documentation": "https://github.com/yourselfhosted/slash?utm_source=coolify.io", "slogan": "An open source, self-hosted links shortener and sharing platform.", diff --git a/templates/service-templates.json b/templates/service-templates.json index c42e28c20..dbef32a3a 100644 --- a/templates/service-templates.json +++ b/templates/service-templates.json @@ -350,6 +350,23 @@ "minversion": "0.0.0", "port": "8083" }, + "cap": { + "documentation": "https://cap.so?utm_source=coolify.io", + "slogan": "Cap is the open source alternative to Loom. Lightweight, powerful, and cross-platform. Record and share in seconds.", + "compose": "c2VydmljZXM6CiAgY2FwLXdlYjoKICAgIGltYWdlOiAnZ2hjci5pby9jYXBzb2Z0d2FyZS9jYXAtd2ViOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9DQVBfMzAwMAogICAgICAtICdEQVRBQkFTRV9VUkw9bXlzcWw6Ly8kU0VSVklDRV9VU0VSX01ZU1FMOiRTRVJWSUNFX1BBU1NXT1JEX01ZU1FMQGNhcC1kYjozMzA2LyR7TVlTUUxfREFUQUJBU0U6LXBsYW5ldHNjYWxlfScKICAgICAgLSAnV0VCX1VSTD0ke1NFUlZJQ0VfRlFETl9DQVB9JwogICAgICAtICdORVhUQVVUSF9VUkw9JHtTRVJWSUNFX0ZRRE5fQ0FQfScKICAgICAgLSAnREFUQUJBU0VfRU5DUllQVElPTl9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEXzY0X0RBVEFCQVNFRU5DUllQVElPTktFWX0nCiAgICAgIC0gJ05FWFRBVVRIX1NFQ1JFVD0ke1NFUlZJQ0VfUEFTU1dPUkRfNjRfTkVYVEFVVEhTRUNSRVR9JwogICAgICAtICdDQVBfQVdTX0FDQ0VTU19LRVk9JHtDQVBfQVdTX0FDQ0VTU19LRVk6P30nCiAgICAgIC0gJ0NBUF9BV1NfU0VDUkVUX0tFWT0ke0NBUF9BV1NfU0VDUkVUX0tFWTo/fScKICAgICAgLSAnQ0FQX0FXU19CVUNLRVQ9JHtDQVBfQVdTX0JVQ0tFVDo/fScKICAgICAgLSAnQ0FQX0FXU19SRUdJT049JHtDQVBfQVdTX1JFR0lPTjo/fScKICAgICAgLSAnUzNfUFVCTElDX0VORFBPSU5UPSR7UzNfUFVCTElDX0VORFBPSU5UOj99JwogICAgICAtICdTM19JTlRFUk5BTF9FTkRQT0lOVD0ke1MzX0lOVEVSTkFMX0VORFBPSU5UOj99JwogICAgICAtIE5FWFRfUlVOVElNRT1ub2RlanMKICAgICAgLSAnUzNfUEFUSF9TVFlMRT0ke1MzX1BBVEhfU1RZTEU6LXRydWV9JwogICAgICAtICdDQVBfQVdTX0VORFBPSU5UPSR7Q0FQX0FXU19FTkRQT0lOVDo/fScKICAgIGRlcGVuZHNfb246CiAgICAgIGNhcC1kYjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogIGNhcC1kYjoKICAgIGltYWdlOiAnbXlzcWw6OC4wJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ01ZU1FMX1VTRVI9JHtTRVJWSUNFX1VTRVJfTVlTUUx9JwogICAgICAtICdNWVNRTF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTVlTUUx9JwogICAgICAtICdNWVNRTF9EQVRBQkFTRT0ke01ZU1FMX0RBVEFCQVNFOi1wbGFuZXRzY2FsZX0nCiAgICAgIC0gJ01ZU1FMX1JPT1RfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX01ZU1FMUk9PVH0nCiAgICAgIC0gJ01ZU1FMX0FMTE9XX0VNUFRZX1BBU1NXT1JEPSR7TVlTUUxfQUxMT1dfRU1QVFlfUEFTU1dPUkQ6LXllc30nCiAgICBjb21tYW5kOgogICAgICAtICctLW1heF9jb25uZWN0aW9ucz0xMDAwJwogICAgICAtICctLWRlZmF1bHQtYXV0aGVudGljYXRpb24tcGx1Z2luPW15c3FsX25hdGl2ZV9wYXNzd29yZCcKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBteXNxbGFkbWluCiAgICAgICAgLSBwaW5nCiAgICAgICAgLSAnLWgnCiAgICAgICAgLSAxMjcuMC4wLjEKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogNQogICAgdm9sdW1lczoKICAgICAgLSAnY2FwX2RiOi92YXIvbGliL215c3FsJwo=", + "tags": [ + "cap", + "loom", + "open", + "source", + "low", + "code" + ], + "category": null, + "logo": "svgs/cap.svg", + "minversion": "0.0.0", + "port": "5679" + }, "castopod": { "documentation": "https://docs.castopod.org/main/en/?utm_source=coolify.io", "slogan": "Castopod is a free & open-source hosting platform made for podcasters who want engage and interact with their audience.", @@ -973,7 +990,7 @@ "ente-photos-with-s3": { "documentation": "https://help.ente.io/self-hosting/installation/compose?utm_source=coolify.io", "slogan": "Ente Photos is a fully open source, End to End Encrypted alternative to Google Photos and Apple Photos.", - "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOjYxM2M2YTk2MzkwZDdhNjI0Y2YzMGI5NDY5NTU3MDVkNjMyNDIzY2MnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fTVVTRVVNXzgwODAKICAgICAgLSBFTlRFX0RCX0hPU1Q9cG9zdGdyZXMKICAgICAgLSBFTlRFX0RCX1BPUlQ9NTQzMgogICAgICAtICdFTlRFX0RCX05BTUU9JHtQT1NUR1JFU19EQjotZW50ZV9kYn0nCiAgICAgIC0gJ0VOVEVfREJfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU30nCiAgICAgIC0gJ0VOVEVfREJfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnRU5URV9IVFRQX1VTRV9UTFM9JHtFTlRFX0hUVFBfVVNFX1RMUzotZmFsc2V9JwogICAgICAtIEVOVEVfUzNfQVJFX0xPQ0FMX0JVQ0tFVFM9ZmFsc2UKICAgICAgLSBFTlRFX1MzX1VTRV9QQVRIX1NUWUxFX1VSTFM9dHJ1ZQogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9LRVk9JHtTRVJWSUNFX1VTRVJfTUlOSU99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9TRUNSRVQ9JHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fRU5EUE9JTlQ9JHtTRVJWSUNFX0ZRRE5fTUlOSU9fOTAwMH0nCiAgICAgIC0gRU5URV9TM19CMl9FVV9DRU5fUkVHSU9OPWV1LWNlbnRyYWwtMgogICAgICAtIEVOVEVfUzNfQjJfRVVfQ0VOX0JVQ0tFVD1iMi1ldS1jZW4KICAgICAgLSAnRU5URV9LRVlfRU5DUllQVElPTj0ke1NFUlZJQ0VfUkVBTEJBU0U2NF9FTkNSWVBUSU9OfScKICAgICAgLSAnRU5URV9LRVlfSEFTSD0ke1NFUlZJQ0VfUkVBTEJBU0U2NF82NF9IQVNIfScKICAgICAgLSAnRU5URV9KV1RfU0VDUkVUPSR7U0VSVklDRV9SRUFMQkFTRTY0X0pXVH0nCiAgICAgIC0gJ0VOVEVfSU5URVJOQUxfQURNSU49JHtFTlRFX0lOVEVSTkFMX0FETUlOOi0xNTgwNTU5OTYyMzg2NDM4fScKICAgICAgLSAnRU5URV9JTlRFUk5BTF9ESVNBQkxFX1JFR0lTVFJBVElPTj0ke0VOVEVfSU5URVJOQUxfRElTQUJMRV9SRUdJU1RSQVRJT046LWZhbHNlfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ211c2V1bS1kYXRhOi9kYXRhJwogICAgICAtICdtdXNldW0tY29uZmlnOi9jb25maWcnCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3JlczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBtaW5pbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2Vfc3RhcnRlZAogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHdnZXQKICAgICAgICAtICctLXNwaWRlcicKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjgwODAvcGluZycKICAgICAgaW50ZXJ2YWw6IDMwcwogICAgICB0aW1lb3V0OiAxMHMKICAgICAgcmV0cmllczogMwogIHdlYjoKICAgIGltYWdlOiAnZ2hjci5pby9lbnRlLWlvL3dlYjpjYTAzMTY1ZjVlN2YyYTUwMTA1ZTZlNDAwMTljMTdhZTZjZGQ5MzRmJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1dFQl8zMDAwCiAgICAgIC0gJ0VOVEVfQVBJX09SSUdJTj0ke1NFUlZJQ0VfRlFETl9NVVNFVU19JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctLWZhaWwnCiAgICAgICAgLSAnaHR0cDovL2xvY2FsaG9zdDozMDAwJwogICAgICBpbnRlcnZhbDogMzBzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzCiAgICAgIHN0YXJ0X3BlcmlvZDogMTBzCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE1LWFscGluZScKICAgIGVudmlyb25tZW50OgogICAgICAtICdQT1NUR1JFU19VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotZW50ZV9kYn0nCiAgICB2b2x1bWVzOgogICAgICAtICdwb3N0Z3Jlcy1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU30gLWQgJHtQT1NUR1JFU19EQjotZW50ZV9kYn0nCiAgICAgIGludGVydmFsOiAxMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogNQogIG1pbmlvOgogICAgaW1hZ2U6ICdxdWF5LmlvL21pbmlvL21pbmlvOlJFTEVBU0UuMjAyNS0wOS0wN1QxNi0xMy0wOVonCiAgICBjb21tYW5kOiAnc2VydmVyIC9kYXRhIC0tY29uc29sZS1hZGRyZXNzICI6OTAwMSInCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBNSU5JT19TRVJWRVJfVVJMPSRNSU5JT19TRVJWRVJfVVJMCiAgICAgIC0gTUlOSU9fQlJPV1NFUl9SRURJUkVDVF9VUkw9JE1JTklPX0JST1dTRVJfUkVESVJFQ1RfVVJMCiAgICAgIC0gTUlOSU9fUk9PVF9VU0VSPSRTRVJWSUNFX1VTRVJfTUlOSU8KICAgICAgLSBNSU5JT19ST09UX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX01JTklPCiAgICB2b2x1bWVzOgogICAgICAtICdtaW5pby1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIG1jCiAgICAgICAgLSByZWFkeQogICAgICAgIC0gbG9jYWwKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIG1pbmlvLWluaXQ6CiAgICBpbWFnZTogJ21pbmlvL21jOlJFTEVBU0UuMjAyNS0wOC0xM1QwOC0zNS00MVonCiAgICBkZXBlbmRzX29uOgogICAgICBtaW5pbzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2Vfc3RhcnRlZAogICAgcmVzdGFydDogb24tZmFpbHVyZQogICAgZXhjbHVkZV9mcm9tX2hjOiB0cnVlCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnTUlOSU9fUk9PVF9VU0VSPSR7U0VSVklDRV9VU0VSX01JTklPfScKICAgICAgLSAnTUlOSU9fUk9PVF9QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfTUlOSU99JwogICAgICAtICdNSU5JT19DT1JTX1VSTFM9JFNFUlZJQ0VfRlFETl9NVVNFVU0sJFNFUlZJQ0VfRlFETl9XRUInCiAgICBlbnRyeXBvaW50OiAiL2Jpbi9zaCAtYyBcIlxuICBlY2hvIFxcXCJNSU5JT19DT1JTX1VSTFM6IFxcJCR7TUlOSU9fQ09SU19VUkxTfVxcXCI7XG4gIHNsZWVwIDU7XG4gIHVudGlsIG1jIGFsaWFzIHNldCBtaW5pbyBodHRwOi8vbWluaW86OTAwMCBcXCQke01JTklPX1JPT1RfVVNFUn0gXFwkJHtNSU5JT19ST09UX1BBU1NXT1JEfTsgZG9cbiAgICBlY2hvICdXYWl0aW5nIGZvciBNaW5JTy4uLic7XG4gICAgc2xlZXAgMjtcbiAgZG9uZTtcbiAgbWMgYWRtaW4gY29uZmlnIHNldCBtaW5pbyBhcGkgY29yc19hbGxvd19vcmlnaW49JyRNSU5JT19DT1JTX1VSTFMnIHx8IHRydWU7XG4gIG1jIG1iIG1pbmlvL2IyLWV1LWNlbiAtLWlnbm9yZS1leGlzdGluZztcbiAgbWMgbWIgbWluaW8vd2FzYWJpLWV1LWNlbnRyYWwtMi12MyAtLWlnbm9yZS1leGlzdGluZztcbiAgbWMgbWIgbWluaW8vc2N3LWV1LWZyLXYzIC0taWdub3JlLWV4aXN0aW5nO1xuICBlY2hvICdNaW5JTyBidWNrZXRzIGFuZCBDT1JTIGNvbmZpZ3VyZWQnO1xuXCIiCg==", + "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOjYxM2M2YTk2MzkwZDdhNjI0Y2YzMGI5NDY5NTU3MDVkNjMyNDIzY2MnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fTVVTRVVNXzgwODAKICAgICAgLSBFTlRFX0RCX0hPU1Q9cG9zdGdyZXMKICAgICAgLSBFTlRFX0RCX1BPUlQ9NTQzMgogICAgICAtICdFTlRFX0RCX05BTUU9JHtQT1NUR1JFU19EQjotZW50ZV9kYn0nCiAgICAgIC0gJ0VOVEVfREJfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFU30nCiAgICAgIC0gJ0VOVEVfREJfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnRU5URV9IVFRQX1VTRV9UTFM9JHtFTlRFX0hUVFBfVVNFX1RMUzotZmFsc2V9JwogICAgICAtIEVOVEVfUzNfQVJFX0xPQ0FMX0JVQ0tFVFM9ZmFsc2UKICAgICAgLSBFTlRFX1MzX1VTRV9QQVRIX1NUWUxFX1VSTFM9dHJ1ZQogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9LRVk9JHtTRVJWSUNFX1VTRVJfTUlOSU99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9TRUNSRVQ9JHtTRVJWSUNFX1BBU1NXT1JEX01JTklPfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fRU5EUE9JTlQ9JHtTRVJWSUNFX0ZRRE5fTUlOSU9fOTAwMH0nCiAgICAgIC0gRU5URV9TM19CMl9FVV9DRU5fUkVHSU9OPWV1LWNlbnRyYWwtMgogICAgICAtIEVOVEVfUzNfQjJfRVVfQ0VOX0JVQ0tFVD1iMi1ldS1jZW4KICAgICAgLSAnRU5URV9LRVlfRU5DUllQVElPTj0ke1NFUlZJQ0VfUkVBTEJBU0U2NF9FTkNSWVBUSU9OfScKICAgICAgLSAnRU5URV9LRVlfSEFTSD0ke1NFUlZJQ0VfUkVBTEJBU0U2NF82NF9IQVNIfScKICAgICAgLSAnRU5URV9KV1RfU0VDUkVUPSR7U0VSVklDRV9SRUFMQkFTRTY0X0pXVH0nCiAgICAgIC0gJ0VOVEVfSU5URVJOQUxfQURNSU49JHtFTlRFX0lOVEVSTkFMX0FETUlOOi0xNTgwNTU5OTYyMzg2NDM4fScKICAgICAgLSAnRU5URV9JTlRFUk5BTF9ESVNBQkxFX1JFR0lTVFJBVElPTj0ke0VOVEVfSU5URVJOQUxfRElTQUJMRV9SRUdJU1RSQVRJT046LWZhbHNlfScKICAgICAgLSAnRU5URV9TTVRQX0hPU1Q9JHtFTlRFX1NNVFBfSE9TVDotc210cC5nbWFpbC5jb219JwogICAgICAtICdFTlRFX1NNVFBfUE9SVD0ke0VOVEVfU01UUF9QT1JUOi01ODd9JwogICAgICAtICdFTlRFX1NNVFBfVVNFUk5BTUU9JHtFTlRFX1NNVFBfVVNFUk5BTUV9JwogICAgICAtICdFTlRFX1NNVFBfUEFTU1dPUkQ9JHtFTlRFX1NNVFBfUEFTU1dPUkR9JwogICAgICAtICdFTlRFX1NNVFBfRU1BSUw9JHtFTlRFX1NNVFBfRU1BSUx9JwogICAgICAtICdFTlRFX1NNVFBfU0VOREVSX05BTUU9JHtFTlRFX1NNVFBfU0VOREVSX05BTUV9JwogICAgICAtICdFTlRFX1NNVFBfRU5DUllQVElPTj0ke0VOVEVfU01UUF9FTkNSWVBUSU9OOi10bHN9JwogICAgdm9sdW1lczoKICAgICAgLSAnbXVzZXVtLWRhdGE6L2RhdGEnCiAgICAgIC0gJ211c2V1bS1jb25maWc6L2NvbmZpZycKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIG1pbmlvOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gd2dldAogICAgICAgIC0gJy0tc3BpZGVyJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODA4MC9waW5nJwogICAgICBpbnRlcnZhbDogMzBzCiAgICAgIHRpbWVvdXQ6IDEwcwogICAgICByZXRyaWVzOiAzCiAgd2ViOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vd2ViOmNhMDMxNjVmNWU3ZjJhNTAxMDVlNmU0MDAxOWMxN2FlNmNkZDkzNGYnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fV0VCXzMwMDAKICAgICAgLSAnRU5URV9BUElfT1JJR0lOPSR7U0VSVklDRV9GUUROX01VU0VVTX0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gY3VybAogICAgICAgIC0gJy0tZmFpbCcKICAgICAgICAtICdodHRwOi8vbG9jYWxob3N0OjMwMDAnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogMTBzCiAgICAgIHJldHJpZXM6IDMKICAgICAgc3RhcnRfcGVyaW9kOiAxMHMKICBwb3N0Z3JlczoKICAgIGltYWdlOiAncG9zdGdyZXM6MTUtYWxwaW5lJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19QQVNTV09SRD0ke1NFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVN9JwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1lbnRlX2RifScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICR7U0VSVklDRV9VU0VSX1BPU1RHUkVTfSAtZCAke1BPU1RHUkVTX0RCOi1lbnRlX2RifScKICAgICAgaW50ZXJ2YWw6IDEwcwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiA1CiAgbWluaW86CiAgICBpbWFnZTogJ3F1YXkuaW8vbWluaW8vbWluaW86UkVMRUFTRS4yMDI1LTA5LTA3VDE2LTEzLTA5WicKICAgIGNvbW1hbmQ6ICdzZXJ2ZXIgL2RhdGEgLS1jb25zb2xlLWFkZHJlc3MgIjo5MDAxIicKICAgIGVudmlyb25tZW50OgogICAgICAtIE1JTklPX1NFUlZFUl9VUkw9JE1JTklPX1NFUlZFUl9VUkwKICAgICAgLSBNSU5JT19CUk9XU0VSX1JFRElSRUNUX1VSTD0kTUlOSU9fQlJPV1NFUl9SRURJUkVDVF9VUkwKICAgICAgLSBNSU5JT19ST09UX1VTRVI9JFNFUlZJQ0VfVVNFUl9NSU5JTwogICAgICAtIE1JTklPX1JPT1RfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfTUlOSU8KICAgIHZvbHVtZXM6CiAgICAgIC0gJ21pbmlvLWRhdGE6L2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gbWMKICAgICAgICAtIHJlYWR5CiAgICAgICAgLSBsb2NhbAogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgbWluaW8taW5pdDoKICAgIGltYWdlOiAnbWluaW8vbWM6UkVMRUFTRS4yMDI1LTA4LTEzVDA4LTM1LTQxWicKICAgIGRlcGVuZHNfb246CiAgICAgIG1pbmlvOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9zdGFydGVkCiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGVudmlyb25tZW50OgogICAgICAtICdNSU5JT19ST09UX1VTRVI9JHtTRVJWSUNFX1VTRVJfTUlOSU99JwogICAgICAtICdNSU5JT19ST09UX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9NSU5JT30nCiAgICAgIC0gJ01JTklPX0NPUlNfVVJMUz0kU0VSVklDRV9GUUROX01VU0VVTSwkU0VSVklDRV9GUUROX1dFQicKICAgIGVudHJ5cG9pbnQ6ICIvYmluL3NoIC1jIFwiXG4gIGVjaG8gXFxcIk1JTklPX0NPUlNfVVJMUzogXFwkJHtNSU5JT19DT1JTX1VSTFN9XFxcIjtcbiAgc2xlZXAgNTtcbiAgdW50aWwgbWMgYWxpYXMgc2V0IG1pbmlvIGh0dHA6Ly9taW5pbzo5MDAwIFxcJCR7TUlOSU9fUk9PVF9VU0VSfSBcXCQke01JTklPX1JPT1RfUEFTU1dPUkR9OyBkb1xuICAgIGVjaG8gJ1dhaXRpbmcgZm9yIE1pbklPLi4uJztcbiAgICBzbGVlcCAyO1xuICBkb25lO1xuICBtYyBhZG1pbiBjb25maWcgc2V0IG1pbmlvIGFwaSBjb3JzX2FsbG93X29yaWdpbj0nJE1JTklPX0NPUlNfVVJMUycgfHwgdHJ1ZTtcbiAgbWMgbWIgbWluaW8vYjItZXUtY2VuIC0taWdub3JlLWV4aXN0aW5nO1xuICBtYyBtYiBtaW5pby93YXNhYmktZXUtY2VudHJhbC0yLXYzIC0taWdub3JlLWV4aXN0aW5nO1xuICBtYyBtYiBtaW5pby9zY3ctZXUtZnItdjMgLS1pZ25vcmUtZXhpc3Rpbmc7XG4gIGVjaG8gJ01pbklPIGJ1Y2tldHMgYW5kIENPUlMgY29uZmlndXJlZCc7XG5cIiIK", "tags": [ "photos", "gallery", @@ -992,7 +1009,7 @@ "ente-photos": { "documentation": "https://help.ente.io/self-hosting/installation/compose?utm_source=coolify.io", "slogan": "Ente Photos is a fully open source, End to End Encrypted alternative to Google Photos and Apple Photos.", - "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9NVVNFVU1fODA4MAogICAgICAtICdFTlRFX0hUVFBfVVNFX1RMUz0ke0VOVEVfSFRUUF9VU0VfVExTOi1mYWxzZX0nCiAgICAgIC0gJ0VOVEVfQVBQU19QVUJMSUNfQUxCVU1TPSR7U0VSVklDRV9GUUROX1dFQl8zMDAyfScKICAgICAgLSAnRU5URV9BUFBTX0NBU1Q9JHtTRVJWSUNFX0ZRRE5fV0VCXzMwMDR9JwogICAgICAtICdFTlRFX0FQUFNfQUNDT1VOVFM9JHtTRVJWSUNFX0ZRRE5fV0VCXzMwMDF9JwogICAgICAtICdFTlRFX0RCX0hPU1Q9JHtFTlRFX0RCX0hPU1Q6LXBvc3RncmVzfScKICAgICAgLSAnRU5URV9EQl9QT1JUPSR7RU5URV9EQl9QT1JUOi01NDMyfScKICAgICAgLSAnRU5URV9EQl9OQU1FPSR7RU5URV9EQl9OQU1FOi1lbnRlX2RifScKICAgICAgLSAnRU5URV9EQl9VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTOi1wZ3VzZXJ9JwogICAgICAtICdFTlRFX0RCX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30nCiAgICAgIC0gJ0VOVEVfS0VZX0VOQ1JZUFRJT049JHtTRVJWSUNFX1JFQUxCQVNFNjRfRU5DUllQVElPTn0nCiAgICAgIC0gJ0VOVEVfS0VZX0hBU0g9JHtTRVJWSUNFX1JFQUxCQVNFNjRfNjRfSEFTSH0nCiAgICAgIC0gJ0VOVEVfSldUX1NFQ1JFVD0ke1NFUlZJQ0VfUkVBTEJBU0U2NF9KV1R9JwogICAgICAtICdFTlRFX0lOVEVSTkFMX0FETUlOPSR7RU5URV9JTlRFUk5BTF9BRE1JTjotMTU4MDU1OTk2MjM4NjQzOH0nCiAgICAgIC0gJ0VOVEVfSU5URVJOQUxfRElTQUJMRV9SRUdJU1RSQVRJT049JHtFTlRFX0lOVEVSTkFMX0RJU0FCTEVfUkVHSVNUUkFUSU9OOi1mYWxzZX0nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX0FSRV9MT0NBTF9CVUNLRVRTPSR7UFJJTUFSWV9TVE9SQUdFX0FSRV9MT0NBTF9CVUNLRVRTOi1mYWxzZX0nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1VTRV9QQVRIX1NUWUxFX1VSTFM9JHtQUklNQVJZX1NUT1JBR0VfVVNFX1BBVEhfU1RZTEVfVVJMUzotdHJ1ZX0nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX0tFWT0ke1MzX1NUT1JBR0VfS0VZOj99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9TRUNSRVQ9JHtTM19TVE9SQUdFX1NFQ1JFVDo/fScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fRU5EUE9JTlQ9JHtTM19TVE9SQUdFX0VORFBPSU5UOj99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9SRUdJT049JHtTM19TVE9SQUdFX1JFR0lPTjotdXMtZWFzdC0xfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fQlVDS0VUPSR7UzNfU1RPUkFHRV9CVUNLRVQ6P30nCiAgICBkZXBlbmRzX29uOgogICAgICBwb3N0Z3JlczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgdm9sdW1lczoKICAgICAgLSAnbXVzZXVtLWRhdGE6L2RhdGEnCiAgICAgIC0gJ211c2V1bS1jb25maWc6L2NvbmZpZycKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLXFPLScKICAgICAgICAtICdodHRwOi8vMTI3LjAuMC4xOjgwODAvcGluZycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDEwCiAgd2ViOgogICAgaW1hZ2U6IGdoY3IuaW8vZW50ZS1pby93ZWIKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9XRUJfMzAwMAogICAgICAtICdFTlRFX0FQSV9PUklHSU49JHtTRVJWSUNFX0ZRRE5fTVVTRVVNfScKICAgICAgLSAnRU5URV9BTEJVTVNfT1JJR0lOPSR7U0VSVklDRV9GUUROX1dFQl8zMDAyfScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSBjdXJsCiAgICAgICAgLSAnLS1mYWlsJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6MzAwMCcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDEwCiAgcG9zdGdyZXM6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE1JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ1BPU1RHUkVTX1VTRVI9JHtTRVJWSUNFX1VTRVJfUE9TVEdSRVM6LXBndXNlcn0nCiAgICAgIC0gJ1BPU1RHUkVTX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30nCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7U0VSVklDRV9EQl9OQU1FOi1lbnRlX2RifScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICR7UE9TVEdSRVNfVVNFUn0gLWQgJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiA1cwogICAgICByZXRyaWVzOiAxMAo=", + "compose": "c2VydmljZXM6CiAgbXVzZXVtOgogICAgaW1hZ2U6ICdnaGNyLmlvL2VudGUtaW8vc2VydmVyOmxhdGVzdCcKICAgIGVudmlyb25tZW50OgogICAgICAtIFNFUlZJQ0VfRlFETl9NVVNFVU1fODA4MAogICAgICAtICdFTlRFX0hUVFBfVVNFX1RMUz0ke0VOVEVfSFRUUF9VU0VfVExTOi1mYWxzZX0nCiAgICAgIC0gJ0VOVEVfQVBQU19QVUJMSUNfQUxCVU1TPSR7U0VSVklDRV9GUUROX1dFQl8zMDAyfScKICAgICAgLSAnRU5URV9BUFBTX0NBU1Q9JHtTRVJWSUNFX0ZRRE5fV0VCXzMwMDR9JwogICAgICAtICdFTlRFX0FQUFNfQUNDT1VOVFM9JHtTRVJWSUNFX0ZRRE5fV0VCXzMwMDF9JwogICAgICAtICdFTlRFX0RCX0hPU1Q9JHtFTlRFX0RCX0hPU1Q6LXBvc3RncmVzfScKICAgICAgLSAnRU5URV9EQl9QT1JUPSR7RU5URV9EQl9QT1JUOi01NDMyfScKICAgICAgLSAnRU5URV9EQl9OQU1FPSR7RU5URV9EQl9OQU1FOi1lbnRlX2RifScKICAgICAgLSAnRU5URV9EQl9VU0VSPSR7U0VSVklDRV9VU0VSX1BPU1RHUkVTOi1wZ3VzZXJ9JwogICAgICAtICdFTlRFX0RCX1BBU1NXT1JEPSR7U0VSVklDRV9QQVNTV09SRF9QT1NUR1JFU30nCiAgICAgIC0gJ0VOVEVfS0VZX0VOQ1JZUFRJT049JHtTRVJWSUNFX1JFQUxCQVNFNjRfRU5DUllQVElPTn0nCiAgICAgIC0gJ0VOVEVfS0VZX0hBU0g9JHtTRVJWSUNFX1JFQUxCQVNFNjRfNjRfSEFTSH0nCiAgICAgIC0gJ0VOVEVfSldUX1NFQ1JFVD0ke1NFUlZJQ0VfUkVBTEJBU0U2NF9KV1R9JwogICAgICAtICdFTlRFX0lOVEVSTkFMX0FETUlOPSR7RU5URV9JTlRFUk5BTF9BRE1JTjotMTU4MDU1OTk2MjM4NjQzOH0nCiAgICAgIC0gJ0VOVEVfSU5URVJOQUxfRElTQUJMRV9SRUdJU1RSQVRJT049JHtFTlRFX0lOVEVSTkFMX0RJU0FCTEVfUkVHSVNUUkFUSU9OOi1mYWxzZX0nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX0FSRV9MT0NBTF9CVUNLRVRTPSR7UFJJTUFSWV9TVE9SQUdFX0FSRV9MT0NBTF9CVUNLRVRTOi1mYWxzZX0nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX1VTRV9QQVRIX1NUWUxFX1VSTFM9JHtQUklNQVJZX1NUT1JBR0VfVVNFX1BBVEhfU1RZTEVfVVJMUzotdHJ1ZX0nCiAgICAgIC0gJ0VOVEVfUzNfQjJfRVVfQ0VOX0tFWT0ke1MzX1NUT1JBR0VfS0VZOj99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9TRUNSRVQ9JHtTM19TVE9SQUdFX1NFQ1JFVDo/fScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fRU5EUE9JTlQ9JHtTM19TVE9SQUdFX0VORFBPSU5UOj99JwogICAgICAtICdFTlRFX1MzX0IyX0VVX0NFTl9SRUdJT049JHtTM19TVE9SQUdFX1JFR0lPTjotdXMtZWFzdC0xfScKICAgICAgLSAnRU5URV9TM19CMl9FVV9DRU5fQlVDS0VUPSR7UzNfU1RPUkFHRV9CVUNLRVQ6P30nCiAgICAgIC0gJ0VOVEVfU01UUF9IT1NUPSR7RU5URV9TTVRQX0hPU1Q6LXNtdHAuZ21haWwuY29tfScKICAgICAgLSAnRU5URV9TTVRQX1BPUlQ9JHtFTlRFX1NNVFBfUE9SVDotNTg3fScKICAgICAgLSAnRU5URV9TTVRQX1VTRVJOQU1FPSR7RU5URV9TTVRQX1VTRVJOQU1FfScKICAgICAgLSAnRU5URV9TTVRQX1BBU1NXT1JEPSR7RU5URV9TTVRQX1BBU1NXT1JEfScKICAgICAgLSAnRU5URV9TTVRQX0VNQUlMPSR7RU5URV9TTVRQX0VNQUlMfScKICAgICAgLSAnRU5URV9TTVRQX1NFTkRFUl9OQU1FPSR7RU5URV9TTVRQX1NFTkRFUl9OQU1FfScKICAgICAgLSAnRU5URV9TTVRQX0VOQ1JZUFRJT049JHtFTlRFX1NNVFBfRU5DUllQVElPTjotdGxzfScKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICB2b2x1bWVzOgogICAgICAtICdtdXNldW0tZGF0YTovZGF0YScKICAgICAgLSAnbXVzZXVtLWNvbmZpZzovY29uZmlnJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHdnZXQKICAgICAgICAtICctcU8tJwogICAgICAgIC0gJ2h0dHA6Ly8xMjcuMC4wLjE6ODA4MC9waW5nJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAKICB3ZWI6CiAgICBpbWFnZTogZ2hjci5pby9lbnRlLWlvL3dlYgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1dFQl8zMDAwCiAgICAgIC0gJ0VOVEVfQVBJX09SSUdJTj0ke1NFUlZJQ0VfRlFETl9NVVNFVU19JwogICAgICAtICdFTlRFX0FMQlVNU19PUklHSU49JHtTRVJWSUNFX0ZRRE5fV0VCXzMwMDJ9JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIGN1cmwKICAgICAgICAtICctLWZhaWwnCiAgICAgICAgLSAnaHR0cDovLzEyNy4wLjAuMTozMDAwJwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAKICBwb3N0Z3JlczoKICAgIGltYWdlOiAncG9zdGdyZXM6MTUnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnUE9TVEdSRVNfVVNFUj0ke1NFUlZJQ0VfVVNFUl9QT1NUR1JFUzotcGd1c2VyfScKICAgICAgLSAnUE9TVEdSRVNfUEFTU1dPUkQ9JHtTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTfScKICAgICAgLSAnUE9TVEdSRVNfREI9JHtTRVJWSUNFX0RCX05BTUU6LWVudGVfZGJ9JwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXMtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJHtQT1NUR1JFU19VU0VSfSAtZCAke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDEwCg==", "tags": [ "photos", "gallery", @@ -2550,7 +2567,7 @@ "n8n-with-postgres-and-worker": { "documentation": "https://n8n.io?utm_source=coolify.io", "slogan": "n8n is an extendable workflow automation tool with queue mode and workers.", - "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fTjhOXzU2NzgKICAgICAgLSAnTjhOX0VESVRPUl9CQVNFX1VSTD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdXRUJIT09LX1VSTD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdOOE5fSE9TVD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSR7R0VORVJJQ19USU1FWk9ORTotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9CZXJsaW59JwogICAgICAtIERCX1RZUEU9cG9zdGdyZXNkYgogICAgICAtICdEQl9QT1NUR1JFU0RCX0RBVEFCQVNFPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICAgIC0gREJfUE9TVEdSRVNEQl9IT1NUPXBvc3RncmVzcWwKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BPUlQ9NTQzMgogICAgICAtIERCX1BPU1RHUkVTREJfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gREJfUE9TVEdSRVNEQl9TQ0hFTUE9cHVibGljCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtIEVYRUNVVElPTlNfTU9ERT1xdWV1ZQogICAgICAtIFFVRVVFX0JVTExfUkVESVNfSE9TVD1yZWRpcwogICAgICAtIFFVRVVFX0hFQUxUSF9DSEVDS19BQ1RJVkU9dHJ1ZQogICAgICAtICdOOE5fRU5DUllQVElPTl9LRVk9JHtTRVJWSUNFX1BBU1NXT1JEX0VOQ1JZUFRJT059JwogICAgICAtIE44Tl9SVU5ORVJTX0VOQUJMRUQ9dHJ1ZQogICAgICAtIE9GRkxPQURfTUFOVUFMX0VYRUNVVElPTlNfVE9fV09SS0VSUz10cnVlCiAgICAgIC0gJ044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU9JHtOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFOi10cnVlfScKICAgICAgLSAnTjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUz0ke044Tl9FTkZPUkNFX1NFVFRJTkdTX0ZJTEVfUEVSTUlTU0lPTlM6LXRydWV9JwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICByZWRpczoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo1Njc4LycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIG44bi13b3JrZXI6CiAgICBpbWFnZTogZG9ja2VyLm44bi5pby9uOG5pby9uOG4KICAgIGNvbW1hbmQ6IHdvcmtlcgogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gJ0dFTkVSSUNfVElNRVpPTkU9JHtHRU5FUklDX1RJTUVaT05FOi1FdXJvcGUvQmVybGlufScKICAgICAgLSAnVFo9JHtUWjotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gREJfVFlQRT1wb3N0Z3Jlc2RiCiAgICAgIC0gJ0RCX1BPU1RHUkVTREJfREFUQUJBU0U9JHtQT1NUR1JFU19EQjotbjhufScKICAgICAgLSBEQl9QT1NUR1JFU0RCX0hPU1Q9cG9zdGdyZXNxbAogICAgICAtIERCX1BPU1RHUkVTREJfUE9SVD01NDMyCiAgICAgIC0gREJfUE9TVEdSRVNEQl9VU0VSPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBEQl9QT1NUR1JFU0RCX1NDSEVNQT1wdWJsaWMKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gRVhFQ1VUSU9OU19NT0RFPXF1ZXVlCiAgICAgIC0gUVVFVUVfQlVMTF9SRURJU19IT1NUPXJlZGlzCiAgICAgIC0gUVVFVUVfSEVBTFRIX0NIRUNLX0FDVElWRT10cnVlCiAgICAgIC0gJ044Tl9FTkNSWVBUSU9OX0tFWT0ke1NFUlZJQ0VfUEFTU1dPUkRfRU5DUllQVElPTn0nCiAgICAgIC0gTjhOX1JVTk5FUlNfRU5BQkxFRD10cnVlCiAgICAgIC0gJ044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU9JHtOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFOi10cnVlfScKICAgICAgLSAnTjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUz0ke044Tl9FTkZPUkNFX1NFVFRJTkdTX0ZJTEVfUEVSTUlTU0lPTlM6LXRydWV9JwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo1Njc4L2hlYWx0aHonCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICAgIGRlcGVuZHNfb246CiAgICAgIG44bjoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBwb3N0Z3Jlc3FsOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHJlZGlzOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgcG9zdGdyZXNxbDoKICAgIGltYWdlOiAncG9zdGdyZXM6MTYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAncG9zdGdyZXNxbC1kYXRhOi92YXIvbGliL3Bvc3RncmVzcWwvZGF0YScKICAgIGVudmlyb25tZW50OgogICAgICAtIFBPU1RHUkVTX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIFBPU1RHUkVTX1BBU1NXT1JEPSRTRVJWSUNFX1BBU1NXT1JEX1BPU1RHUkVTCiAgICAgIC0gJ1BPU1RHUkVTX0RCPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3BnX2lzcmVhZHkgLVUgJCR7UE9TVEdSRVNfVVNFUn0gLWQgJCR7UE9TVEdSRVNfREJ9JwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogMjBzCiAgICAgIHJldHJpZXM6IDEwCiAgcmVkaXM6CiAgICBpbWFnZTogJ3JlZGlzOjYtYWxwaW5lJwogICAgdm9sdW1lczoKICAgICAgLSAncmVkaXMtZGF0YTovZGF0YScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSByZWRpcy1jbGkKICAgICAgICAtIHBpbmcKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDEwCg==", + "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6ICdkb2NrZXIubjhuLmlvL244bmlvL244bjoxLjExNC40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX044Tl81Njc4CiAgICAgIC0gJ044Tl9FRElUT1JfQkFTRV9VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnR0VORVJJQ19USU1FWk9ORT0ke0dFTkVSSUNfVElNRVpPTkU6LUV1cm9wZS9CZXJsaW59JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQmVybGlufScKICAgICAgLSBEQl9UWVBFPXBvc3RncmVzZGIKICAgICAgLSAnREJfUE9TVEdSRVNEQl9EQVRBQkFTRT0ke1BPU1RHUkVTX0RCOi1uOG59JwogICAgICAtIERCX1BPU1RHUkVTREJfSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QT1JUPTU0MzIKICAgICAgLSBEQl9QT1NUR1JFU0RCX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIERCX1BPU1RHUkVTREJfU0NIRU1BPXB1YmxpYwogICAgICAtIERCX1BPU1RHUkVTREJfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgICAgLSBFWEVDVVRJT05TX01PREU9cXVldWUKICAgICAgLSBRVUVVRV9CVUxMX1JFRElTX0hPU1Q9cmVkaXMKICAgICAgLSBRVUVVRV9IRUFMVEhfQ0hFQ0tfQUNUSVZFPXRydWUKICAgICAgLSAnTjhOX0VOQ1JZUFRJT05fS0VZPSR7U0VSVklDRV9QQVNTV09SRF9FTkNSWVBUSU9OfScKICAgICAgLSBOOE5fUlVOTkVSU19FTkFCTEVEPXRydWUKICAgICAgLSBPRkZMT0FEX01BTlVBTF9FWEVDVVRJT05TX1RPX1dPUktFUlM9dHJ1ZQogICAgICAtICdOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFPSR7TjhOX0JMT0NLX0VOVl9BQ0NFU1NfSU5fTk9ERTotdHJ1ZX0nCiAgICAgIC0gJ044Tl9HSVRfTk9ERV9ESVNBQkxFX0JBUkVfUkVQT1M9JHtOOE5fR0lUX05PREVfRElTQUJMRV9CQVJFX1JFUE9TOi10cnVlfScKICAgICAgLSAnTjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUz0ke044Tl9FTkZPUkNFX1NFVFRJTkdTX0ZJTEVfUEVSTUlTU0lPTlM6LXRydWV9JwogICAgICAtICdOOE5fUFJPWFlfSE9QUz0ke044Tl9QUk9YWV9IT1BTOi0xfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ244bi1kYXRhOi9ob21lL25vZGUvLm44bicKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcmVkaXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnd2dldCAtcU8tIGh0dHA6Ly8xMjcuMC4wLjE6NTY3OC8nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICBuOG4td29ya2VyOgogICAgaW1hZ2U6ICdkb2NrZXIubjhuLmlvL244bmlvL244bjoxLjExNC40JwogICAgY29tbWFuZDogd29ya2VyCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSAnR0VORVJJQ19USU1FWk9ORT0ke0dFTkVSSUNfVElNRVpPTkU6LUV1cm9wZS9CZXJsaW59JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQmVybGlufScKICAgICAgLSBEQl9UWVBFPXBvc3RncmVzZGIKICAgICAgLSAnREJfUE9TVEdSRVNEQl9EQVRBQkFTRT0ke1BPU1RHUkVTX0RCOi1uOG59JwogICAgICAtIERCX1BPU1RHUkVTREJfSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QT1JUPTU0MzIKICAgICAgLSBEQl9QT1NUR1JFU0RCX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIERCX1BPU1RHUkVTREJfU0NIRU1BPXB1YmxpYwogICAgICAtIERCX1BPU1RHUkVTREJfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgICAgLSBFWEVDVVRJT05TX01PREU9cXVldWUKICAgICAgLSBRVUVVRV9CVUxMX1JFRElTX0hPU1Q9cmVkaXMKICAgICAgLSBRVUVVRV9IRUFMVEhfQ0hFQ0tfQUNUSVZFPXRydWUKICAgICAgLSAnTjhOX0VOQ1JZUFRJT05fS0VZPSR7U0VSVklDRV9QQVNTV09SRF9FTkNSWVBUSU9OfScKICAgICAgLSBOOE5fUlVOTkVSU19FTkFCTEVEPXRydWUKICAgICAgLSAnTjhOX0JMT0NLX0VOVl9BQ0NFU1NfSU5fTk9ERT0ke044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU6LXRydWV9JwogICAgICAtICdOOE5fR0lUX05PREVfRElTQUJMRV9CQVJFX1JFUE9TPSR7TjhOX0dJVF9OT0RFX0RJU0FCTEVfQkFSRV9SRVBPUzotdHJ1ZX0nCiAgICAgIC0gJ044Tl9FTkZPUkNFX1NFVFRJTkdTX0ZJTEVfUEVSTUlTU0lPTlM9JHtOOE5fRU5GT1JDRV9TRVRUSU5HU19GSUxFX1BFUk1JU1NJT05TOi10cnVlfScKICAgICAgLSAnTjhOX1BST1hZX0hPUFM9JHtOOE5fUFJPWFlfSE9QUzotMX0nCiAgICB2b2x1bWVzOgogICAgICAtICduOG4tZGF0YTovaG9tZS9ub2RlLy5uOG4nCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ3dnZXQgLXFPLSBodHRwOi8vMTI3LjAuMC4xOjU2NzgvaGVhbHRoeicKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogICAgZGVwZW5kc19vbjoKICAgICAgbjhuOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgcmVkaXM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdwb3N0Z3Jlc3FsLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUE9TVEdSRVNfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotbjhufScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICByZWRpczoKICAgIGltYWdlOiAncmVkaXM6Ni1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdyZWRpcy1kYXRhOi9kYXRhJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQKICAgICAgICAtIHJlZGlzLWNsaQogICAgICAgIC0gcGluZwogICAgICBpbnRlcnZhbDogNXMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMTAK", "tags": [ "n8n", "workflow", @@ -2571,7 +2588,7 @@ "n8n-with-postgresql": { "documentation": "https://n8n.io?utm_source=coolify.io", "slogan": "n8n is an extendable workflow automation tool.", - "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fTjhOXzU2NzgKICAgICAgLSAnTjhOX0VESVRPUl9CQVNFX1VSTD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdXRUJIT09LX1VSTD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdOOE5fSE9TVD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSR7R0VORVJJQ19USU1FWk9ORTotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9CZXJsaW59JwogICAgICAtIERCX1RZUEU9cG9zdGdyZXNkYgogICAgICAtICdEQl9QT1NUR1JFU0RCX0RBVEFCQVNFPSR7UE9TVEdSRVNfREI6LW44bn0nCiAgICAgIC0gREJfUE9TVEdSRVNEQl9IT1NUPXBvc3RncmVzcWwKICAgICAgLSBEQl9QT1NUR1JFU0RCX1BPUlQ9NTQzMgogICAgICAtIERCX1BPU1RHUkVTREJfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gREJfUE9TVEdSRVNEQl9TQ0hFTUE9cHVibGljCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgZGVwZW5kc19vbjoKICAgICAgcG9zdGdyZXNxbDoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo1Njc4LycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAogIHBvc3RncmVzcWw6CiAgICBpbWFnZTogJ3Bvc3RncmVzOjE2LWFscGluZScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ3Bvc3RncmVzcWwtZGF0YTovdmFyL2xpYi9wb3N0Z3Jlc3FsL2RhdGEnCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBQT1NUR1JFU19VU0VSPSRTRVJWSUNFX1VTRVJfUE9TVEdSRVMKICAgICAgLSBQT1NUR1JFU19QQVNTV09SRD0kU0VSVklDRV9QQVNTV09SRF9QT1NUR1JFUwogICAgICAtICdQT1NUR1JFU19EQj0ke1BPU1RHUkVTX0RCOi1uOG59JwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICdwZ19pc3JlYWR5IC1VICQke1BPU1RHUkVTX1VTRVJ9IC1kICQke1BPU1RHUkVTX0RCfScKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", + "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6ICdkb2NrZXIubjhuLmlvL244bmlvL244bjoxLjExNC40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX044Tl81Njc4CiAgICAgIC0gJ044Tl9FRElUT1JfQkFTRV9VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnR0VORVJJQ19USU1FWk9ORT0ke0dFTkVSSUNfVElNRVpPTkU6LUV1cm9wZS9CZXJsaW59JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQmVybGlufScKICAgICAgLSBEQl9UWVBFPXBvc3RncmVzZGIKICAgICAgLSAnREJfUE9TVEdSRVNEQl9EQVRBQkFTRT0ke1BPU1RHUkVTX0RCOi1uOG59JwogICAgICAtIERCX1BPU1RHUkVTREJfSE9TVD1wb3N0Z3Jlc3FsCiAgICAgIC0gREJfUE9TVEdSRVNEQl9QT1JUPTU0MzIKICAgICAgLSBEQl9QT1NUR1JFU0RCX1VTRVI9JFNFUlZJQ0VfVVNFUl9QT1NUR1JFUwogICAgICAtIERCX1BPU1RHUkVTREJfU0NIRU1BPXB1YmxpYwogICAgICAtIERCX1BPU1RHUkVTREJfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgICAgLSAnTjhOX1JVTk5FUlNfRU5BQkxFRD0ke044Tl9SVU5ORVJTX0VOQUJMRUQ6LXRydWV9JwogICAgICAtICdOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFPSR7TjhOX0JMT0NLX0VOVl9BQ0NFU1NfSU5fTk9ERTotdHJ1ZX0nCiAgICAgIC0gJ044Tl9HSVRfTk9ERV9ESVNBQkxFX0JBUkVfUkVQT1M9JHtOOE5fR0lUX05PREVfRElTQUJMRV9CQVJFX1JFUE9TOi10cnVlfScKICAgICAgLSAnTjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUz0ke044Tl9FTkZPUkNFX1NFVFRJTkdTX0ZJTEVfUEVSTUlTU0lPTlM6LXRydWV9JwogICAgICAtICdOOE5fUFJPWFlfSE9QUz0ke044Tl9QUk9YWV9IT1BTOi0xfScKICAgIHZvbHVtZXM6CiAgICAgIC0gJ244bi1kYXRhOi9ob21lL25vZGUvLm44bicKICAgIGRlcGVuZHNfb246CiAgICAgIHBvc3RncmVzcWw6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAnd2dldCAtcU8tIGh0dHA6Ly8xMjcuMC4wLjE6NTY3OC8nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAKICBwb3N0Z3Jlc3FsOgogICAgaW1hZ2U6ICdwb3N0Z3JlczoxNi1hbHBpbmUnCiAgICB2b2x1bWVzOgogICAgICAtICdwb3N0Z3Jlc3FsLWRhdGE6L3Zhci9saWIvcG9zdGdyZXNxbC9kYXRhJwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gUE9TVEdSRVNfVVNFUj0kU0VSVklDRV9VU0VSX1BPU1RHUkVTCiAgICAgIC0gUE9TVEdSRVNfUEFTU1dPUkQ9JFNFUlZJQ0VfUEFTU1dPUkRfUE9TVEdSRVMKICAgICAgLSAnUE9TVEdSRVNfREI9JHtQT1NUR1JFU19EQjotbjhufScKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ELVNIRUxMCiAgICAgICAgLSAncGdfaXNyZWFkeSAtVSAkJHtQT1NUR1JFU19VU0VSfSAtZCAkJHtQT1NUR1JFU19EQn0nCiAgICAgIGludGVydmFsOiA1cwogICAgICB0aW1lb3V0OiAyMHMKICAgICAgcmV0cmllczogMTAK", "tags": [ "n8n", "workflow", @@ -2589,7 +2606,7 @@ "n8n": { "documentation": "https://n8n.io?utm_source=coolify.io", "slogan": "n8n is an extendable workflow automation tool.", - "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6IGRvY2tlci5uOG4uaW8vbjhuaW8vbjhuCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fTjhOXzU2NzgKICAgICAgLSAnTjhOX0VESVRPUl9CQVNFX1VSTD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdXRUJIT09LX1VSTD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdOOE5fSE9TVD0ke1NFUlZJQ0VfRlFETl9OOE59JwogICAgICAtICdHRU5FUklDX1RJTUVaT05FPSR7R0VORVJJQ19USU1FWk9ORTotRXVyb3BlL0Jlcmxpbn0nCiAgICAgIC0gJ1RaPSR7VFo6LUV1cm9wZS9CZXJsaW59JwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo1Njc4LycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", + "compose": "c2VydmljZXM6CiAgbjhuOgogICAgaW1hZ2U6ICdkb2NrZXIubjhuLmlvL244bmlvL244bjoxLjExNC40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX044Tl81Njc4CiAgICAgIC0gJ044Tl9FRElUT1JfQkFTRV9VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnV0VCSE9PS19VUkw9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnTjhOX0hPU1Q9JHtTRVJWSUNFX0ZRRE5fTjhOfScKICAgICAgLSAnR0VORVJJQ19USU1FWk9ORT0ke0dFTkVSSUNfVElNRVpPTkU6LUV1cm9wZS9CZXJsaW59JwogICAgICAtICdUWj0ke1RaOi1FdXJvcGUvQmVybGlufScKICAgICAgLSAnREJfU1FMSVRFX1BPT0xfU0laRT0ke0RCX1NRTElURV9QT09MX1NJWkU6LTN9JwogICAgICAtICdOOE5fUlVOTkVSU19FTkFCTEVEPSR7TjhOX1JVTk5FUlNfRU5BQkxFRDotdHJ1ZX0nCiAgICAgIC0gJ044Tl9CTE9DS19FTlZfQUNDRVNTX0lOX05PREU9JHtOOE5fQkxPQ0tfRU5WX0FDQ0VTU19JTl9OT0RFOi10cnVlfScKICAgICAgLSAnTjhOX0dJVF9OT0RFX0RJU0FCTEVfQkFSRV9SRVBPUz0ke044Tl9HSVRfTk9ERV9ESVNBQkxFX0JBUkVfUkVQT1M6LXRydWV9JwogICAgICAtICdOOE5fRU5GT1JDRV9TRVRUSU5HU19GSUxFX1BFUk1JU1NJT05TPSR7TjhOX0VORk9SQ0VfU0VUVElOR1NfRklMRV9QRVJNSVNTSU9OUzotdHJ1ZX0nCiAgICAgIC0gJ044Tl9QUk9YWV9IT1BTPSR7TjhOX1BST1hZX0hPUFM6LTF9JwogICAgdm9sdW1lczoKICAgICAgLSAnbjhuLWRhdGE6L2hvbWUvbm9kZS8ubjhuJwogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6CiAgICAgICAgLSBDTUQtU0hFTEwKICAgICAgICAtICd3Z2V0IC1xTy0gaHR0cDovLzEyNy4wLjAuMTo1Njc4LycKICAgICAgaW50ZXJ2YWw6IDVzCiAgICAgIHRpbWVvdXQ6IDIwcwogICAgICByZXRyaWVzOiAxMAo=", "tags": [ "n8n", "workflow", @@ -3380,6 +3397,20 @@ "minversion": "0.0.0", "port": "9696" }, + "proxyscotch": { + "documentation": "https://github.com/hoppscotch/proxyscotch?utm_source=coolify.io", + "slogan": "A simple proxy server created for https://hoppscotch.io - CORS proxy", + "compose": "c2VydmljZXM6CiAgcHJveHlzY290Y2g6CiAgICBpbWFnZTogJ2hvcHBzY290Y2gvcHJveHlzY290Y2g6djAuMS40JwogICAgZW52aXJvbm1lbnQ6CiAgICAgIC0gU0VSVklDRV9GUUROX1BST1hZU0NPVENIXzkxNTkKICAgICAgLSAnUFJPWFlTQ09UQ0hfVE9LRU49JHtTRVJWSUNFX1BBU1NXT1JEX1RPS0VOfScKICAgICAgLSAnUFJPWFlTQ09UQ0hfQUxMT1dFRF9PUklHSU5TPSR7QUxMT1dFRF9PUklHSU5TOi0qfScKICAgICAgLSAnUFJPWFlTQ09UQ0hfQkFOTkVEX09VVFBVVFM9JHtCQU5ORURfT1VUUFVUU30nCiAgICAgIC0gJ1BST1hZU0NPVENIX0JBTk5FRF9ERVNUUz0ke0JBTk5FRF9ERVNUU30nCg==", + "tags": [ + "proxy", + "hoppscotch", + "cors" + ], + "category": null, + "logo": "svgs/hoppscotch.png", + "minversion": "0.0.0", + "port": "9159" + }, "pterodactyl-with-wings": { "documentation": "https://pterodactyl.io/?utm_source=coolify.io", "slogan": "Pterodactyl is a free, open-source game server management panel", @@ -3656,6 +3687,25 @@ "minversion": "0.0.0", "port": "8080" }, + "signoz": { + "documentation": "https://signoz.io/docs/introduction/?utm_source=coolify.io", + "slogan": "An observability platform native to OpenTelemetry with logs, traces and metrics.", + "compose": "c2VydmljZXM6CiAgaW5pdC1jbGlja2hvdXNlOgogICAgaW1hZ2U6ICdjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNi1hbHBpbmUnCiAgICBjb21tYW5kOgogICAgICAtIGJhc2gKICAgICAgLSAnLWMnCiAgICAgIC0gInZlcnNpb249XCJ2MC4wLjFcIlxubm9kZV9vcz0kJCh1bmFtZSAtcyB8IHRyICdbOnVwcGVyOl0nICdbOmxvd2VyOl0nKVxubm9kZV9hcmNoPSQkKHVuYW1lIC1tIHwgc2VkIHMvYWFyY2g2NC9hcm02NC8gfCBzZWQgcy94ODZfNjQvYW1kNjQvKVxuZWNobyBcIkZldGNoaW5nIGhpc3RvZ3JhbS1iaW5hcnkgZm9yICQke25vZGVfb3N9LyQke25vZGVfYXJjaH1cIlxuY2QgL3RtcFxud2dldCAtTyBoaXN0b2dyYW0tcXVhbnRpbGUudGFyLmd6IFwiaHR0cHM6Ly9naXRodWIuY29tL1NpZ05vei9zaWdub3ovcmVsZWFzZXMvZG93bmxvYWQvaGlzdG9ncmFtLXF1YW50aWxlJTJGJCR7dmVyc2lvbn0vaGlzdG9ncmFtLXF1YW50aWxlXyQke25vZGVfb3N9XyQke25vZGVfYXJjaH0udGFyLmd6XCJcbnRhciAteHZ6ZiBoaXN0b2dyYW0tcXVhbnRpbGUudGFyLmd6XG5ta2RpciAtcCAvdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy9oaXN0b2dyYW1RdWFudGlsZVxubXYgaGlzdG9ncmFtLXF1YW50aWxlIC92YXIvbGliL2NsaWNraG91c2UvdXNlcl9zY3JpcHRzL2hpc3RvZ3JhbVF1YW50aWxlXG4iCiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICB6b29rZWVwZXI6CiAgICBpbWFnZTogJ3NpZ25vei96b29rZWVwZXI6My45LjMnCiAgICB1c2VyOiByb290CiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRC1TSEVMTAogICAgICAgIC0gJ2N1cmwgLXMgLW0gMiBodHRwOi8vbG9jYWxob3N0OjgwODAvY29tbWFuZHMvcnVvayB8IGdyZXAgZXJyb3IgfCBncmVwIG51bGwnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMwogICAgbG9nZ2luZzoKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtc2l6ZTogNTBtCiAgICAgICAgbWF4LWZpbGU6ICczJwogICAgdm9sdW1lczoKICAgICAgLSAnem9va2VlcGVyOi9iaXRuYW1pL3pvb2tlZXBlcicKICAgIGVudmlyb25tZW50OgogICAgICAtICdBTExPV19BTk9OWU1PVVNfTE9HSU49JHtaT09fQUxMT1dfQU5PTllNT1VTX0xPR0lOOi15ZXN9JwogICAgICAtICdaT09fQVVUT1BVUkdFX0lOVEVSVkFMPSR7Wk9PX0FVVE9QVVJHRV9JTlRFUlZBTDotMX0nCiAgICAgIC0gJ1pPT19FTkFCTEVfUFJPTUVUSEVVU19NRVRSSUNTPSR7Wk9PX0VOQUJMRV9QUk9NRVRIRVVTX01FVFJJQ1M6LXllc30nCiAgICAgIC0gJ1pPT19QUk9NRVRIRVVTX01FVFJJQ1NfUE9SVF9OVU1CRVI9JHtaT09fUFJPTUVUSEVVU19NRVRSSUNTX1BPUlRfTlVNQkVSOi05MTQxfScKICBjbGlja2hvdXNlOgogICAgaW1hZ2U6ICdjbGlja2hvdXNlL2NsaWNraG91c2Utc2VydmVyOjI1LjUuNi1hbHBpbmUnCiAgICB0dHk6IHRydWUKICAgIGRlcGVuZHNfb246CiAgICAgIGluaXQtY2xpY2tob3VzZToKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgICB6b29rZWVwZXI6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGhlYWx0aGNoZWNrOgogICAgICB0ZXN0OgogICAgICAgIC0gQ01ECiAgICAgICAgLSB3Z2V0CiAgICAgICAgLSAnLS1zcGlkZXInCiAgICAgICAgLSAnLXEnCiAgICAgICAgLSAnMC4wLjAuMDo4MTIzL3BpbmcnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMwogICAgdWxpbWl0czoKICAgICAgbnByb2M6IDY1NTM1CiAgICAgIG5vZmlsZToKICAgICAgICBzb2Z0OiAyNjIxNDQKICAgICAgICBoYXJkOiAyNjIxNDQKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICAgIGVudmlyb25tZW50OgogICAgICAtIENMSUNLSE9VU0VfU0tJUF9VU0VSX1NFVFVQPTEKICAgIHZvbHVtZXM6CiAgICAgIC0KICAgICAgICB0eXBlOiB2b2x1bWUKICAgICAgICBzb3VyY2U6IGNsaWNraG91c2UKICAgICAgICB0YXJnZXQ6IC92YXIvbGliL2NsaWNraG91c2UvCiAgICAgIC0KICAgICAgICB0eXBlOiBiaW5kCiAgICAgICAgc291cmNlOiAuL2NsaWNraG91c2UvY3VzdG9tLWZ1bmN0aW9uLnhtbAogICAgICAgIHRhcmdldDogL2V0Yy9jbGlja2hvdXNlLXNlcnZlci9jdXN0b20tZnVuY3Rpb24ueG1sCiAgICAgICAgY29udGVudDogIjxmdW5jdGlvbnM+XG4gICAgPGZ1bmN0aW9uPlxuICAgICAgICA8dHlwZT5leGVjdXRhYmxlPC90eXBlPlxuICAgICAgICA8bmFtZT5oaXN0b2dyYW1RdWFudGlsZTwvbmFtZT5cbiAgICAgICAgPHJldHVybl90eXBlPkZsb2F0NjQ8L3JldHVybl90eXBlPlxuICAgICAgICA8YXJndW1lbnQ+XG4gICAgICAgICAgICA8dHlwZT5BcnJheShGbG9hdDY0KTwvdHlwZT5cbiAgICAgICAgICAgIDxuYW1lPmJ1Y2tldHM8L25hbWU+XG4gICAgICAgIDwvYXJndW1lbnQ+XG4gICAgICAgIDxhcmd1bWVudD5cbiAgICAgICAgICAgIDx0eXBlPkFycmF5KEZsb2F0NjQpPC90eXBlPlxuICAgICAgICAgICAgPG5hbWU+Y291bnRzPC9uYW1lPlxuICAgICAgICA8L2FyZ3VtZW50PlxuICAgICAgICA8YXJndW1lbnQ+XG4gICAgICAgICAgICA8dHlwZT5GbG9hdDY0PC90eXBlPlxuICAgICAgICAgICAgPG5hbWU+cXVhbnRpbGU8L25hbWU+XG4gICAgICAgIDwvYXJndW1lbnQ+XG4gICAgICAgIDxmb3JtYXQ+Q1NWPC9mb3JtYXQ+XG4gICAgICAgIDxjb21tYW5kPi4vaGlzdG9ncmFtUXVhbnRpbGU8L2NvbW1hbmQ+XG4gICAgPC9mdW5jdGlvbj5cbjwvZnVuY3Rpb25zPlxuIgogICAgICAtCiAgICAgICAgdHlwZTogYmluZAogICAgICAgIHNvdXJjZTogLi9jbGlja2hvdXNlL2NsdXN0ZXIueG1sCiAgICAgICAgdGFyZ2V0OiAvZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy5kL2NsdXN0ZXIueG1sCiAgICAgICAgY29udGVudDogIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIFpvb0tlZXBlciBpcyB1c2VkIHRvIHN0b3JlIG1ldGFkYXRhIGFib3V0IHJlcGxpY2FzLCB3aGVuIHVzaW5nIFJlcGxpY2F0ZWQgdGFibGVzLlxuICAgICAgICBPcHRpb25hbC4gSWYgeW91IGRvbid0IHVzZSByZXBsaWNhdGVkIHRhYmxlcywgeW91IGNvdWxkIG9taXQgdGhhdC5cblxuICAgICAgICBTZWUgaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL2VuZ2luZXMvdGFibGUtZW5naW5lcy9tZXJnZXRyZWUtZmFtaWx5L3JlcGxpY2F0aW9uL1xuICAgICAgLS0+XG4gICAgPHpvb2tlZXBlcj5cbiAgICAgICAgPG5vZGUgaW5kZXg9XCIxXCI+XG4gICAgICAgICAgICA8aG9zdD56b29rZWVwZXI8L2hvc3Q+XG4gICAgICAgICAgICA8cG9ydD4yMTgxPC9wb3J0PlxuICAgICAgICA8L25vZGU+XG4gICAgPC96b29rZWVwZXI+XG5cbiAgICA8IS0tIENvbmZpZ3VyYXRpb24gb2YgY2x1c3RlcnMgdGhhdCBjb3VsZCBiZSB1c2VkIGluIERpc3RyaWJ1dGVkIHRhYmxlcy5cbiAgICAgICAgaHR0cHM6Ly9jbGlja2hvdXNlLmNvbS9kb2NzL2VuL29wZXJhdGlvbnMvdGFibGVfZW5naW5lcy9kaXN0cmlidXRlZC9cbiAgICAgIC0tPlxuICAgIDxyZW1vdGVfc2VydmVycz5cbiAgICAgICAgPGNsdXN0ZXI+XG4gICAgICAgICAgICA8IS0tIEludGVyLXNlcnZlciBwZXItY2x1c3RlciBzZWNyZXQgZm9yIERpc3RyaWJ1dGVkIHF1ZXJpZXNcbiAgICAgICAgICAgICAgICBkZWZhdWx0OiBubyBzZWNyZXQgKG5vIGF1dGhlbnRpY2F0aW9uIHdpbGwgYmUgcGVyZm9ybWVkKVxuXG4gICAgICAgICAgICAgICAgSWYgc2V0LCB0aGVuIERpc3RyaWJ1dGVkIHF1ZXJpZXMgd2lsbCBiZSB2YWxpZGF0ZWQgb24gc2hhcmRzLCBzbyBhdCBsZWFzdDpcbiAgICAgICAgICAgICAgICAtIHN1Y2ggY2x1c3RlciBzaG91bGQgZXhpc3Qgb24gdGhlIHNoYXJkLFxuICAgICAgICAgICAgICAgIC0gc3VjaCBjbHVzdGVyIHNob3VsZCBoYXZlIHRoZSBzYW1lIHNlY3JldC5cblxuICAgICAgICAgICAgICAgIEFuZCBhbHNvIChhbmQgd2hpY2ggaXMgbW9yZSBpbXBvcnRhbnQpLCB0aGUgaW5pdGlhbF91c2VyIHdpbGxcbiAgICAgICAgICAgICAgICBiZSB1c2VkIGFzIGN1cnJlbnQgdXNlciBmb3IgdGhlIHF1ZXJ5LlxuXG4gICAgICAgICAgICAgICAgUmlnaHQgbm93IHRoZSBwcm90b2NvbCBpcyBwcmV0dHkgc2ltcGxlIGFuZCBpdCBvbmx5IHRha2VzIGludG8gYWNjb3VudDpcbiAgICAgICAgICAgICAgICAtIGNsdXN0ZXIgbmFtZVxuICAgICAgICAgICAgICAgIC0gcXVlcnlcblxuICAgICAgICAgICAgICAgIEFsc28gaXQgd2lsbCBiZSBuaWNlIGlmIHRoZSBmb2xsb3dpbmcgd2lsbCBiZSBpbXBsZW1lbnRlZDpcbiAgICAgICAgICAgICAgICAtIHNvdXJjZSBob3N0bmFtZSAoc2VlIGludGVyc2VydmVyX2h0dHBfaG9zdCksIGJ1dCB0aGVuIGl0IHdpbGwgZGVwZW5kcyBmcm9tIEROUyxcbiAgICAgICAgICAgICAgICAgIGl0IGNhbiB1c2UgSVAgYWRkcmVzcyBpbnN0ZWFkLCBidXQgdGhlbiB0aGUgeW91IG5lZWQgdG8gZ2V0IGNvcnJlY3Qgb24gdGhlIGluaXRpYXRvciBub2RlLlxuICAgICAgICAgICAgICAgIC0gdGFyZ2V0IGhvc3RuYW1lIC8gaXAgYWRkcmVzcyAoc2FtZSBub3RlcyBhcyBmb3Igc291cmNlIGhvc3RuYW1lKVxuICAgICAgICAgICAgICAgIC0gdGltZS1iYXNlZCBzZWN1cml0eSB0b2tlbnNcbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPCEtLSA8c2VjcmV0Pjwvc2VjcmV0PiAtLT5cbiAgICAgICAgICAgIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8IS0tIE9wdGlvbmFsLiBXaGV0aGVyIHRvIHdyaXRlIGRhdGEgdG8ganVzdCBvbmUgb2YgdGhlIHJlcGxpY2FzLiBEZWZhdWx0OiBmYWxzZSAod3JpdGUgZGF0YSB0byBhbGwgcmVwbGljYXMpLiAtLT5cbiAgICAgICAgICAgICAgICA8IS0tIDxpbnRlcm5hbF9yZXBsaWNhdGlvbj5mYWxzZTwvaW50ZXJuYWxfcmVwbGljYXRpb24+IC0tPlxuICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9uYWwuIFNoYXJkIHdlaWdodCB3aGVuIHdyaXRpbmcgZGF0YS4gRGVmYXVsdDogMS4gLS0+XG4gICAgICAgICAgICAgICAgPCEtLSA8d2VpZ2h0PjE8L3dlaWdodD4gLS0+XG4gICAgICAgICAgICAgICAgPHJlcGxpY2E+XG4gICAgICAgICAgICAgICAgICAgIDxob3N0PmNsaWNraG91c2U8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjkwMDA8L3BvcnQ+XG4gICAgICAgICAgICAgICAgICAgIDwhLS0gT3B0aW9uYWwuIFByaW9yaXR5IG9mIHRoZSByZXBsaWNhIGZvciBsb2FkX2JhbGFuY2luZy4gRGVmYXVsdDogMSAobGVzcyB2YWx1ZSBoYXMgbW9yZSBwcmlvcml0eSkuIC0tPlxuICAgICAgICAgICAgICAgICAgICA8IS0tIDxwcmlvcml0eT4xPC9wcmlvcml0eT4gLS0+XG4gICAgICAgICAgICAgICAgPC9yZXBsaWNhPlxuICAgICAgICAgICAgPC9zaGFyZD5cbiAgICAgICAgICAgIDwhLS0gPHNoYXJkPlxuICAgICAgICAgICAgICAgIDxyZXBsaWNhPlxuICAgICAgICAgICAgICAgICAgICA8aG9zdD5jbGlja2hvdXNlLTI8L2hvc3Q+XG4gICAgICAgICAgICAgICAgICAgIDxwb3J0PjkwMDA8L3BvcnQ+XG4gICAgICAgICAgICAgICAgPC9yZXBsaWNhPlxuICAgICAgICAgICAgPC9zaGFyZD5cbiAgICAgICAgICAgIDxzaGFyZD5cbiAgICAgICAgICAgICAgICA8cmVwbGljYT5cbiAgICAgICAgICAgICAgICAgICAgPGhvc3Q+Y2xpY2tob3VzZS0zPC9ob3N0PlxuICAgICAgICAgICAgICAgICAgICA8cG9ydD45MDAwPC9wb3J0PlxuICAgICAgICAgICAgICAgIDwvcmVwbGljYT5cbiAgICAgICAgICAgIDwvc2hhcmQ+IC0tPlxuICAgICAgICA8L2NsdXN0ZXI+XG4gICAgPC9yZW1vdGVfc2VydmVycz5cbjwvY2xpY2tob3VzZT5cbiIKICAgICAgLQogICAgICAgIHR5cGU6IGJpbmQKICAgICAgICBzb3VyY2U6IC4vY2xpY2tob3VzZS91c2Vycy54bWwKICAgICAgICB0YXJnZXQ6IC9ldGMvY2xpY2tob3VzZS1zZXJ2ZXIvdXNlcnMueG1sCiAgICAgICAgY29udGVudDogIjw/eG1sIHZlcnNpb249XCIxLjBcIj8+XG48Y2xpY2tob3VzZT5cbiAgICA8IS0tIFNlZSBhbHNvIHRoZSBmaWxlcyBpbiB1c2Vycy5kIGRpcmVjdG9yeSB3aGVyZSB0aGUgc2V0dGluZ3MgY2FuIGJlIG92ZXJyaWRkZW4uIC0tPlxuXG4gICAgPCEtLSBQcm9maWxlcyBvZiBzZXR0aW5ncy4gLS0+XG4gICAgPHByb2ZpbGVzPlxuICAgICAgICA8IS0tIERlZmF1bHQgc2V0dGluZ3MuIC0tPlxuICAgICAgICA8ZGVmYXVsdD5cbiAgICAgICAgICAgIDwhLS0gTWF4aW11bSBtZW1vcnkgdXNhZ2UgZm9yIHByb2Nlc3Npbmcgc2luZ2xlIHF1ZXJ5LCBpbiBieXRlcy4gLS0+XG4gICAgICAgICAgICA8bWF4X21lbW9yeV91c2FnZT4xMDAwMDAwMDAwMDwvbWF4X21lbW9yeV91c2FnZT5cblxuICAgICAgICAgICAgPCEtLSBIb3cgdG8gY2hvb3NlIGJldHdlZW4gcmVwbGljYXMgZHVyaW5nIGRpc3RyaWJ1dGVkIHF1ZXJ5IHByb2Nlc3NpbmcuXG4gICAgICAgICAgICAgICAgcmFuZG9tIC0gY2hvb3NlIHJhbmRvbSByZXBsaWNhIGZyb20gc2V0IG9mIHJlcGxpY2FzIHdpdGggbWluaW11bSBudW1iZXIgb2YgZXJyb3JzXG4gICAgICAgICAgICAgICAgbmVhcmVzdF9ob3N0bmFtZSAtIGZyb20gc2V0IG9mIHJlcGxpY2FzIHdpdGggbWluaW11bSBudW1iZXIgb2YgZXJyb3JzLCBjaG9vc2UgcmVwbGljYVxuICAgICAgICAgICAgICAgICAgd2l0aCBtaW5pbXVtIG51bWJlciBvZiBkaWZmZXJlbnQgc3ltYm9scyBiZXR3ZWVuIHJlcGxpY2EncyBob3N0bmFtZSBhbmQgbG9jYWwgaG9zdG5hbWVcbiAgICAgICAgICAgICAgICAgIChIYW1taW5nIGRpc3RhbmNlKS5cbiAgICAgICAgICAgICAgICBpbl9vcmRlciAtIGZpcnN0IGxpdmUgcmVwbGljYSBpcyBjaG9zZW4gaW4gc3BlY2lmaWVkIG9yZGVyLlxuICAgICAgICAgICAgICAgIGZpcnN0X29yX3JhbmRvbSAtIGlmIGZpcnN0IHJlcGxpY2Egb25lIGhhcyBoaWdoZXIgbnVtYmVyIG9mIGVycm9ycywgcGljayBhIHJhbmRvbSBvbmUgZnJvbSByZXBsaWNhcyB3aXRoIG1pbmltdW0gbnVtYmVyIG9mIGVycm9ycy5cbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPGxvYWRfYmFsYW5jaW5nPnJhbmRvbTwvbG9hZF9iYWxhbmNpbmc+XG4gICAgICAgIDwvZGVmYXVsdD5cblxuICAgICAgICA8IS0tIFByb2ZpbGUgdGhhdCBhbGxvd3Mgb25seSByZWFkIHF1ZXJpZXMuIC0tPlxuICAgICAgICA8cmVhZG9ubHk+XG4gICAgICAgICAgICA8cmVhZG9ubHk+MTwvcmVhZG9ubHk+XG4gICAgICAgIDwvcmVhZG9ubHk+XG4gICAgPC9wcm9maWxlcz5cblxuICAgIDwhLS0gVXNlcnMgYW5kIEFDTC4gLS0+XG4gICAgPHVzZXJzPlxuICAgICAgICA8IS0tIElmIHVzZXIgbmFtZSB3YXMgbm90IHNwZWNpZmllZCwgJ2RlZmF1bHQnIHVzZXIgaXMgdXNlZC4gLS0+XG4gICAgICAgIDxkZWZhdWx0PlxuICAgICAgICAgICAgPCEtLSBTZWUgYWxzbyB0aGUgZmlsZXMgaW4gdXNlcnMuZCBkaXJlY3Rvcnkgd2hlcmUgdGhlIHBhc3N3b3JkIGNhbiBiZSBvdmVycmlkZGVuLlxuXG4gICAgICAgICAgICAgICAgUGFzc3dvcmQgY291bGQgYmUgc3BlY2lmaWVkIGluIHBsYWludGV4dCBvciBpbiBTSEEyNTYgKGluIGhleCBmb3JtYXQpLlxuXG4gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBwYXNzd29yZCBpbiBwbGFpbnRleHQgKG5vdCByZWNvbW1lbmRlZCksIHBsYWNlIGl0IGluICdwYXNzd29yZCcgZWxlbWVudC5cbiAgICAgICAgICAgICAgICBFeGFtcGxlOiA8cGFzc3dvcmQ+cXdlcnR5PC9wYXNzd29yZD4uXG4gICAgICAgICAgICAgICAgUGFzc3dvcmQgY291bGQgYmUgZW1wdHkuXG5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IFNIQTI1NiwgcGxhY2UgaXQgaW4gJ3Bhc3N3b3JkX3NoYTI1Nl9oZXgnIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPHBhc3N3b3JkX3NoYTI1Nl9oZXg+NjVlODRiZTMzNTMyZmI3ODRjNDgxMjk2NzVmOWVmZjNhNjgyYjI3MTY4YzBlYTc0NGIyY2Y1OGVlMDIzMzdjNTwvcGFzc3dvcmRfc2hhMjU2X2hleD5cbiAgICAgICAgICAgICAgICBSZXN0cmljdGlvbnMgb2YgU0hBMjU2OiBpbXBvc3NpYmlsaXR5IHRvIGNvbm5lY3QgdG8gQ2xpY2tIb3VzZSB1c2luZyBNeVNRTCBKUyBjbGllbnQgKGFzIG9mIEp1bHkgMjAxOSkuXG5cbiAgICAgICAgICAgICAgICBJZiB5b3Ugd2FudCB0byBzcGVjaWZ5IGRvdWJsZSBTSEExLCBwbGFjZSBpdCBpbiAncGFzc3dvcmRfZG91YmxlX3NoYTFfaGV4JyBlbGVtZW50LlxuICAgICAgICAgICAgICAgIEV4YW1wbGU6IDxwYXNzd29yZF9kb3VibGVfc2hhMV9oZXg+ZTM5NTc5NmQ2NTQ2YjFiNjVkYjlkNjY1Y2Q0M2YwZTg1OGRkNDMwMzwvcGFzc3dvcmRfZG91YmxlX3NoYTFfaGV4PlxuXG4gICAgICAgICAgICAgICAgSWYgeW91IHdhbnQgdG8gc3BlY2lmeSBhIHByZXZpb3VzbHkgZGVmaW5lZCBMREFQIHNlcnZlciAoc2VlICdsZGFwX3NlcnZlcnMnIGluIHRoZSBtYWluIGNvbmZpZykgZm9yIGF1dGhlbnRpY2F0aW9uLFxuICAgICAgICAgICAgICAgICAgcGxhY2UgaXRzIG5hbWUgaW4gJ3NlcnZlcicgZWxlbWVudCBpbnNpZGUgJ2xkYXAnIGVsZW1lbnQuXG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPGxkYXA+PHNlcnZlcj5teV9sZGFwX3NlcnZlcjwvc2VydmVyPjwvbGRhcD5cblxuICAgICAgICAgICAgICAgIElmIHlvdSB3YW50IHRvIGF1dGhlbnRpY2F0ZSB0aGUgdXNlciB2aWEgS2VyYmVyb3MgKGFzc3VtaW5nIEtlcmJlcm9zIGlzIGVuYWJsZWQsIHNlZSAna2VyYmVyb3MnIGluIHRoZSBtYWluIGNvbmZpZyksXG4gICAgICAgICAgICAgICAgICBwbGFjZSAna2VyYmVyb3MnIGVsZW1lbnQgaW5zdGVhZCBvZiAncGFzc3dvcmQnIChhbmQgc2ltaWxhcikgZWxlbWVudHMuXG4gICAgICAgICAgICAgICAgVGhlIG5hbWUgcGFydCBvZiB0aGUgY2Fub25pY2FsIHByaW5jaXBhbCBuYW1lIG9mIHRoZSBpbml0aWF0b3IgbXVzdCBtYXRjaCB0aGUgdXNlciBuYW1lIGZvciBhdXRoZW50aWNhdGlvbiB0byBzdWNjZWVkLlxuICAgICAgICAgICAgICAgIFlvdSBjYW4gYWxzbyBwbGFjZSAncmVhbG0nIGVsZW1lbnQgaW5zaWRlICdrZXJiZXJvcycgZWxlbWVudCB0byBmdXJ0aGVyIHJlc3RyaWN0IGF1dGhlbnRpY2F0aW9uIHRvIG9ubHkgdGhvc2UgcmVxdWVzdHNcbiAgICAgICAgICAgICAgICAgIHdob3NlIGluaXRpYXRvcidzIHJlYWxtIG1hdGNoZXMgaXQuXG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPGtlcmJlcm9zIC8+XG4gICAgICAgICAgICAgICAgRXhhbXBsZTogPGtlcmJlcm9zPjxyZWFsbT5FWEFNUExFLkNPTTwvcmVhbG0+PC9rZXJiZXJvcz5cblxuICAgICAgICAgICAgICAgIEhvdyB0byBnZW5lcmF0ZSBkZWNlbnQgcGFzc3dvcmQ6XG4gICAgICAgICAgICAgICAgRXhlY3V0ZTogUEFTU1dPUkQ9JChiYXNlNjQgPCAvZGV2L3VyYW5kb20gfCBoZWFkIC1jOCk7IGVjaG8gXCIkUEFTU1dPUkRcIjsgZWNobyAtbiBcIiRQQVNTV09SRFwiIHwgc2hhMjU2c3VtIHwgdHIgLWQgJy0nXG4gICAgICAgICAgICAgICAgSW4gZmlyc3QgbGluZSB3aWxsIGJlIHBhc3N3b3JkIGFuZCBpbiBzZWNvbmQgLSBjb3JyZXNwb25kaW5nIFNIQTI1Ni5cblxuICAgICAgICAgICAgICAgIEhvdyB0byBnZW5lcmF0ZSBkb3VibGUgU0hBMTpcbiAgICAgICAgICAgICAgICBFeGVjdXRlOiBQQVNTV09SRD0kKGJhc2U2NCA8IC9kZXYvdXJhbmRvbSB8IGhlYWQgLWM4KTsgZWNobyBcIiRQQVNTV09SRFwiOyBlY2hvIC1uIFwiJFBBU1NXT1JEXCIgfCBzaGExc3VtIHwgdHIgLWQgJy0nIHwgeHhkIC1yIC1wIHwgc2hhMXN1bSB8IHRyIC1kICctJ1xuICAgICAgICAgICAgICAgIEluIGZpcnN0IGxpbmUgd2lsbCBiZSBwYXNzd29yZCBhbmQgaW4gc2Vjb25kIC0gY29ycmVzcG9uZGluZyBkb3VibGUgU0hBMS5cbiAgICAgICAgICAgIC0tPlxuICAgICAgICAgICAgPHBhc3N3b3JkPjwvcGFzc3dvcmQ+XG5cbiAgICAgICAgICAgIDwhLS0gTGlzdCBvZiBuZXR3b3JrcyB3aXRoIG9wZW4gYWNjZXNzLlxuXG4gICAgICAgICAgICAgICAgVG8gb3BlbiBhY2Nlc3MgZnJvbSBldmVyeXdoZXJlLCBzcGVjaWZ5OlxuICAgICAgICAgICAgICAgICAgICA8aXA+OjovMDwvaXA+XG5cbiAgICAgICAgICAgICAgICBUbyBvcGVuIGFjY2VzcyBvbmx5IGZyb20gbG9jYWxob3N0LCBzcGVjaWZ5OlxuICAgICAgICAgICAgICAgICAgICA8aXA+OjoxPC9pcD5cbiAgICAgICAgICAgICAgICAgICAgPGlwPjEyNy4wLjAuMTwvaXA+XG5cbiAgICAgICAgICAgICAgICBFYWNoIGVsZW1lbnQgb2YgbGlzdCBoYXMgb25lIG9mIHRoZSBmb2xsb3dpbmcgZm9ybXM6XG4gICAgICAgICAgICAgICAgPGlwPiBJUC1hZGRyZXNzIG9yIG5ldHdvcmsgbWFzay4gRXhhbXBsZXM6IDIxMy4xODAuMjA0LjMgb3IgMTAuMC4wLjEvOCBvciAxMC4wLjAuMS8yNTUuMjU1LjI1NS4wXG4gICAgICAgICAgICAgICAgICAgIDJhMDI6NmI4OjozIG9yIDJhMDI6NmI4OjozLzY0IG9yIDJhMDI6NmI4OjozL2ZmZmY6ZmZmZjpmZmZmOmZmZmY6Oi5cbiAgICAgICAgICAgICAgICA8aG9zdD4gSG9zdG5hbWUuIEV4YW1wbGU6IHNlcnZlcjAxLmNsaWNraG91c2UuY29tLlxuICAgICAgICAgICAgICAgICAgICBUbyBjaGVjayBhY2Nlc3MsIEROUyBxdWVyeSBpcyBwZXJmb3JtZWQsIGFuZCBhbGwgcmVjZWl2ZWQgYWRkcmVzc2VzIGNvbXBhcmVkIHRvIHBlZXIgYWRkcmVzcy5cbiAgICAgICAgICAgICAgICA8aG9zdF9yZWdleHA+IFJlZ3VsYXIgZXhwcmVzc2lvbiBmb3IgaG9zdCBuYW1lcy4gRXhhbXBsZSwgXnNlcnZlclxcZFxcZC1cXGRcXGQtXFxkXFwuY2xpY2tob3VzZVxcLmNvbSRcbiAgICAgICAgICAgICAgICAgICAgVG8gY2hlY2sgYWNjZXNzLCBETlMgUFRSIHF1ZXJ5IGlzIHBlcmZvcm1lZCBmb3IgcGVlciBhZGRyZXNzIGFuZCB0aGVuIHJlZ2V4cCBpcyBhcHBsaWVkLlxuICAgICAgICAgICAgICAgICAgICBUaGVuLCBmb3IgcmVzdWx0IG9mIFBUUiBxdWVyeSwgYW5vdGhlciBETlMgcXVlcnkgaXMgcGVyZm9ybWVkIGFuZCBhbGwgcmVjZWl2ZWQgYWRkcmVzc2VzIGNvbXBhcmVkIHRvIHBlZXIgYWRkcmVzcy5cbiAgICAgICAgICAgICAgICAgICAgU3Ryb25nbHkgcmVjb21tZW5kZWQgdGhhdCByZWdleHAgaXMgZW5kcyB3aXRoICRcbiAgICAgICAgICAgICAgICBBbGwgcmVzdWx0cyBvZiBETlMgcmVxdWVzdHMgYXJlIGNhY2hlZCB0aWxsIHNlcnZlciByZXN0YXJ0LlxuICAgICAgICAgICAgLS0+XG4gICAgICAgICAgICA8bmV0d29ya3M+XG4gICAgICAgICAgICAgICAgPGlwPjo6LzA8L2lwPlxuICAgICAgICAgICAgPC9uZXR3b3Jrcz5cblxuICAgICAgICAgICAgPCEtLSBTZXR0aW5ncyBwcm9maWxlIGZvciB1c2VyLiAtLT5cbiAgICAgICAgICAgIDxwcm9maWxlPmRlZmF1bHQ8L3Byb2ZpbGU+XG5cbiAgICAgICAgICAgIDwhLS0gUXVvdGEgZm9yIHVzZXIuIC0tPlxuICAgICAgICAgICAgPHF1b3RhPmRlZmF1bHQ8L3F1b3RhPlxuXG4gICAgICAgICAgICA8IS0tIFVzZXIgY2FuIGNyZWF0ZSBvdGhlciB1c2VycyBhbmQgZ3JhbnQgcmlnaHRzIHRvIHRoZW0uIC0tPlxuICAgICAgICAgICAgPCEtLSA8YWNjZXNzX21hbmFnZW1lbnQ+MTwvYWNjZXNzX21hbmFnZW1lbnQ+IC0tPlxuICAgICAgICA8L2RlZmF1bHQ+XG4gICAgPC91c2Vycz5cblxuICAgIDwhLS0gUXVvdGFzLiAtLT5cbiAgICA8cXVvdGFzPlxuICAgICAgICA8IS0tIE5hbWUgb2YgcXVvdGEuIC0tPlxuICAgICAgICA8ZGVmYXVsdD5cbiAgICAgICAgICAgIDwhLS0gTGltaXRzIGZvciB0aW1lIGludGVydmFsLiBZb3UgY291bGQgc3BlY2lmeSBtYW55IGludGVydmFscyB3aXRoIGRpZmZlcmVudCBsaW1pdHMuIC0tPlxuICAgICAgICAgICAgPGludGVydmFsPlxuICAgICAgICAgICAgICAgIDwhLS0gTGVuZ3RoIG9mIGludGVydmFsLiAtLT5cbiAgICAgICAgICAgICAgICA8ZHVyYXRpb24+MzYwMDwvZHVyYXRpb24+XG5cbiAgICAgICAgICAgICAgICA8IS0tIE5vIGxpbWl0cy4gSnVzdCBjYWxjdWxhdGUgcmVzb3VyY2UgdXNhZ2UgZm9yIHRpbWUgaW50ZXJ2YWwuIC0tPlxuICAgICAgICAgICAgICAgIDxxdWVyaWVzPjA8L3F1ZXJpZXM+XG4gICAgICAgICAgICAgICAgPGVycm9ycz4wPC9lcnJvcnM+XG4gICAgICAgICAgICAgICAgPHJlc3VsdF9yb3dzPjA8L3Jlc3VsdF9yb3dzPlxuICAgICAgICAgICAgICAgIDxyZWFkX3Jvd3M+MDwvcmVhZF9yb3dzPlxuICAgICAgICAgICAgICAgIDxleGVjdXRpb25fdGltZT4wPC9leGVjdXRpb25fdGltZT5cbiAgICAgICAgICAgIDwvaW50ZXJ2YWw+XG4gICAgICAgIDwvZGVmYXVsdD5cbiAgICA8L3F1b3Rhcz5cbjwvY2xpY2tob3VzZT5cbiIKICAgICAgLQogICAgICAgIHR5cGU6IGJpbmQKICAgICAgICBzb3VyY2U6IC4vY2xpY2tob3VzZS9jb25maWcueG1sCiAgICAgICAgdGFyZ2V0OiAvZXRjL2NsaWNraG91c2Utc2VydmVyL2NvbmZpZy54bWwKICAgICAgICBjb250ZW50OiAiPD94bWwgdmVyc2lvbj1cIjEuMFwiPz5cbjxjbGlja2hvdXNlPlxuICA8bWF4X2Nvbm5lY3Rpb25zPjQwOTY8L21heF9jb25uZWN0aW9ucz5cbiAgPGtlZXBfYWxpdmVfdGltZW91dD4zPC9rZWVwX2FsaXZlX3RpbWVvdXQ+XG4gIDxtYXhfY29uY3VycmVudF9xdWVyaWVzPjEwMDwvbWF4X2NvbmN1cnJlbnRfcXVlcmllcz5cbiAgPG1hcmtfY2FjaGVfc2l6ZT41MzY4NzA5MTIwPC9tYXJrX2NhY2hlX3NpemU+XG4gIDxtbWFwX2NhY2hlX3NpemU+MTAwMDwvbW1hcF9jYWNoZV9zaXplPlxuICA8Y29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9zaXplPjEzNDIxNzcyODwvY29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9zaXplPlxuICA8Y29tcGlsZWRfZXhwcmVzc2lvbl9jYWNoZV9lbGVtZW50c19zaXplPjEwMDAwPC9jb21waWxlZF9leHByZXNzaW9uX2NhY2hlX2VsZW1lbnRzX3NpemU+XG4gIDxjdXN0b21fc2V0dGluZ3NfcHJlZml4ZXM+PC9jdXN0b21fc2V0dGluZ3NfcHJlZml4ZXM+XG4gIDxkaWN0aW9uYXJpZXNfY29uZmlnPipfZGljdGlvbmFyeS54bWw8L2RpY3Rpb25hcmllc19jb25maWc+XG4gIDx1c2VyX2RlZmluZWRfZXhlY3V0YWJsZV9mdW5jdGlvbnNfY29uZmlnPipmdW5jdGlvbi54bWw8L3VzZXJfZGVmaW5lZF9leGVjdXRhYmxlX2Z1bmN0aW9uc19jb25maWc+XG4gIDx1c2VyX3NjcmlwdHNfcGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL3VzZXJfc2NyaXB0cy88L3VzZXJfc2NyaXB0c19wYXRoPlxuICA8aHR0cF9wb3J0PjgxMjM8L2h0dHBfcG9ydD5cbiAgPHRjcF9wb3J0PjkwMDA8L3RjcF9wb3J0PlxuICA8bXlzcWxfcG9ydD45MDA0PC9teXNxbF9wb3J0PlxuICA8cG9zdGdyZXNxbF9wb3J0PjkwMDU8L3Bvc3RncmVzcWxfcG9ydD5cbiAgPGludGVyc2VydmVyX2h0dHBfcG9ydD45MDA5PC9pbnRlcnNlcnZlcl9odHRwX3BvcnQ+XG4gIDxsb2dnZXI+XG4gICAgPGxldmVsPmluZm9ybWF0aW9uPC9sZXZlbD5cbiAgICA8Zm9ybWF0dGluZz5cbiAgICAgIDx0eXBlPmpzb248L3R5cGU+XG4gICAgPC9mb3JtYXR0aW5nPlxuICA8L2xvZ2dlcj5cbiAgPG1hY3Jvcz5cbiAgICA8c2hhcmQ+MDE8L3NoYXJkPlxuICAgIDxyZXBsaWNhPmV4YW1wbGUwMS0wMS0xPC9yZXBsaWNhPlxuICA8L21hY3Jvcz5cbiAgPHByb21ldGhldXM+XG4gICAgPGVuZHBvaW50Pi9tZXRyaWNzPC9lbmRwb2ludD5cbiAgICA8cG9ydD45MzYzPC9wb3J0PlxuICAgIDxtZXRyaWNzPnRydWU8L21ldHJpY3M+XG4gICAgPGV2ZW50cz50cnVlPC9ldmVudHM+XG4gICAgPGFzeW5jaHJvbm91c19tZXRyaWNzPnRydWU8L2FzeW5jaHJvbm91c19tZXRyaWNzPlxuICAgIDxzdGF0dXNfaW5mbz50cnVlPC9zdGF0dXNfaW5mbz5cbiAgPC9wcm9tZXRoZXVzPlxuICA8b3BlbnRlbGVtZXRyeV9zcGFuX2xvZz5cbiAgICA8ZW5naW5lPmVuZ2luZSBNZXJnZVRyZWVcbiAgICAgICAgICAgIHBhcnRpdGlvbiBieSB0b1lZWVlNTShmaW5pc2hfZGF0ZSlcbiAgICAgICAgICAgIG9yZGVyIGJ5IChmaW5pc2hfZGF0ZSwgZmluaXNoX3RpbWVfdXMsIHRyYWNlX2lkKTwvZW5naW5lPlxuICA8L29wZW50ZWxlbWV0cnlfc3Bhbl9sb2c+XG4gIDxxdWVyeV9tYXNraW5nX3J1bGVzPlxuICAgIDxydWxlPlxuICAgICAgPG5hbWU+aGlkZSBlbmNyeXB0L2RlY3J5cHQgYXJndW1lbnRzPC9uYW1lPlxuICAgICAgPHJlZ2V4cD4oKD86YWVzXyk/KD86ZW5jcnlwdHxkZWNyeXB0KSg/Ol9teXNxbCk/KVxccypcXChcXHMqKD86Jyg/OlxcXFwnfC4pKyd8Lio/KVxccypcXCk8L3JlZ2V4cD5cbiAgICAgIDxyZXBsYWNlPlxcMSg/Pz8pPC9yZXBsYWNlPlxuICAgIDwvcnVsZT5cbiAgPC9xdWVyeV9tYXNraW5nX3J1bGVzPlxuICA8c2VuZF9jcmFzaF9yZXBvcnRzPlxuICAgIDxlbmFibGVkPmZhbHNlPC9lbmFibGVkPlxuICAgIDxhbm9ueW1pemU+ZmFsc2U8L2Fub255bWl6ZT5cbiAgICA8ZW5kcG9pbnQ+aHR0cHM6Ly82ZjMzMDM0Y2ZlNjg0ZGQ3YTNhYjk4NzVlNTdiMWM4ZEBvMzg4ODcwLmluZ2VzdC5zZW50cnkuaW8vNTIyNjI3NzwvZW5kcG9pbnQ+XG4gIDwvc2VuZF9jcmFzaF9yZXBvcnRzPlxuICA8bWVyZ2VfdHJlZV9tZXRhZGF0YV9jYWNoZT5cbiAgICA8bHJ1X2NhY2hlX3NpemU+MjY4NDM1NDU2PC9scnVfY2FjaGVfc2l6ZT5cbiAgICA8Y29udGludWVfaWZfY29ycnVwdGVkPnRydWU8L2NvbnRpbnVlX2lmX2NvcnJ1cHRlZD5cbiAgPC9tZXJnZV90cmVlX21ldGFkYXRhX2NhY2hlPlxuICA8dXNlcl9kaXJlY3Rvcmllcz5cbiAgICA8dXNlcnNfeG1sPlxuICAgICAgICA8IS0tIFBhdGggdG8gY29uZmlndXJhdGlvbiBmaWxlIHdpdGggcHJlZGVmaW5lZCB1c2Vycy4gLS0+XG4gICAgICAgIDxwYXRoPnVzZXJzLnhtbDwvcGF0aD5cbiAgICA8L3VzZXJzX3htbD5cbiAgICA8bG9jYWxfZGlyZWN0b3J5PlxuICAgICAgICA8IS0tIFBhdGggdG8gZm9sZGVyIHdoZXJlIHVzZXJzIGNyZWF0ZWQgYnkgU1FMIGNvbW1hbmRzIGFyZSBzdG9yZWQuIC0tPlxuICAgICAgICA8cGF0aD4vdmFyL2xpYi9jbGlja2hvdXNlL2FjY2Vzcy88L3BhdGg+XG4gICAgPC9sb2NhbF9kaXJlY3Rvcnk+XG4gIDwvdXNlcl9kaXJlY3Rvcmllcz5cbiAgPGRlZmF1bHRfcHJvZmlsZT5kZWZhdWx0PC9kZWZhdWx0X3Byb2ZpbGU+XG4gICAgPGRpc3RyaWJ1dGVkX2RkbD5cbiAgICAgICAgPCEtLSBQYXRoIGluIFpvb0tlZXBlciB0byBxdWV1ZSB3aXRoIERETCBxdWVyaWVzIC0tPlxuICAgICAgICA8cGF0aD4vY2xpY2tob3VzZS90YXNrX3F1ZXVlL2RkbDwvcGF0aD5cbiAgICA8L2Rpc3RyaWJ1dGVkX2RkbD5cbjwvY2xpY2tob3VzZT5cbiIKICBzaWdub3o6CiAgICBpbWFnZTogJ3NpZ25vei9zaWdub3o6djAuOTcuMScKICAgIGRlcGVuZHNfb246CiAgICAgIGNsaWNraG91c2U6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgICAgc2NoZW1hLW1pZ3JhdG9yLXN5bmM6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2NvbXBsZXRlZF9zdWNjZXNzZnVsbHkKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICAgIGNvbW1hbmQ6CiAgICAgIC0gJy0tY29uZmlnPS9yb290L2NvbmZpZy9wcm9tZXRoZXVzLnltbCcKICAgIHZvbHVtZXM6CiAgICAgIC0KICAgICAgICB0eXBlOiBiaW5kCiAgICAgICAgc291cmNlOiAuL3Byb21ldGhldXMueW1sCiAgICAgICAgdGFyZ2V0OiAvcm9vdC9jb25maWcvcHJvbWV0aGV1cy55bWwKICAgICAgICBjb250ZW50OiAiIyBteSBnbG9iYWwgY29uZmlnXG5nbG9iYWw6XG4gIHNjcmFwZV9pbnRlcnZhbDogICAgIDVzICMgU2V0IHRoZSBzY3JhcGUgaW50ZXJ2YWwgdG8gZXZlcnkgMTUgc2Vjb25kcy4gRGVmYXVsdCBpcyBldmVyeSAxIG1pbnV0ZS5cbiAgZXZhbHVhdGlvbl9pbnRlcnZhbDogMTVzICMgRXZhbHVhdGUgcnVsZXMgZXZlcnkgMTUgc2Vjb25kcy4gVGhlIGRlZmF1bHQgaXMgZXZlcnkgMSBtaW51dGUuXG4gICMgc2NyYXBlX3RpbWVvdXQgaXMgc2V0IHRvIHRoZSBnbG9iYWwgZGVmYXVsdCAoMTBzKS5cblxuIyBBbGVydG1hbmFnZXIgY29uZmlndXJhdGlvblxuYWxlcnRpbmc6XG4gIGFsZXJ0bWFuYWdlcnM6XG4gIC0gc3RhdGljX2NvbmZpZ3M6XG4gICAgLSB0YXJnZXRzOlxuICAgICAgLSBhbGVydG1hbmFnZXI6OTA5M1xuXG4jIExvYWQgcnVsZXMgb25jZSBhbmQgcGVyaW9kaWNhbGx5IGV2YWx1YXRlIHRoZW0gYWNjb3JkaW5nIHRvIHRoZSBnbG9iYWwgJ2V2YWx1YXRpb25faW50ZXJ2YWwnLlxucnVsZV9maWxlczogW11cbiAgIyAtIFwiZmlyc3RfcnVsZXMueW1sXCJcbiAgIyAtIFwic2Vjb25kX3J1bGVzLnltbFwiXG4gICMgLSAnYWxlcnRzLnltbCdcblxuIyBBIHNjcmFwZSBjb25maWd1cmF0aW9uIGNvbnRhaW5pbmcgZXhhY3RseSBvbmUgZW5kcG9pbnQgdG8gc2NyYXBlOlxuIyBIZXJlIGl0J3MgUHJvbWV0aGV1cyBpdHNlbGYuXG5zY3JhcGVfY29uZmlnczogW11cblxucmVtb3RlX3JlYWQ6XG4gIC0gdXJsOiB0Y3A6Ly9jbGlja2hvdXNlOjkwMDAvc2lnbm96X21ldHJpY3NcbiIKICAgICAgLQogICAgICAgIHR5cGU6IHZvbHVtZQogICAgICAgIHNvdXJjZTogc3FsaXRlCiAgICAgICAgdGFyZ2V0OiAvdmFyL2xpYi9zaWdub3ovCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fU0lHTk9aXzgwODAKICAgICAgLSAnU0lHTk9aX0pXVF9TRUNSRVQ9JHtTRVJWSUNFX1JFQUxCQVNFNjRfSldUU0VDUkVUfScKICAgICAgLSAnU0lHTk9aX1RFTEVNRVRSWVNUT1JFX0NMSUNLSE9VU0VfRFNOPXRjcDovL2NsaWNraG91c2U6OTAwMCcKICAgICAgLSBTSUdOT1pfU1FMU1RPUkVfU1FMSVRFX1BBVEg9L3Zhci9saWIvc2lnbm96L3NpZ25vei5kYgogICAgICAtIERBU0hCT0FSRFNfUEFUSD0vcm9vdC9jb25maWcvZGFzaGJvYXJkcwogICAgICAtIFNUT1JBR0U9Y2xpY2tob3VzZQogICAgICAtIEdPREVCVUc9bmV0ZG5zPWdvCiAgICAgIC0gREVQTE9ZTUVOVF9UWVBFPWRvY2tlci1zdGFuZGFsb25lLWFtZAogICAgICAtICdTSUdOT1pfU1RBVFNSRVBPUlRFUl9FTkFCTEVEPSR7U0lHTk9aX1NUQVRTUkVQT1JURVJfRU5BQkxFRDotdHJ1ZX0nCiAgICAgIC0gJ1NJR05PWl9FTUFJTElOR19FTkFCTEVEPSR7U0lHTk9aX0VNQUlMSU5HX0VOQUJMRUQ6LWZhbHNlfScKICAgICAgLSAnU0lHTk9aX0VNQUlMSU5HX1NNVFBfQUREUkVTUz0ke1NJR05PWl9FTUFJTElOR19TTVRQX0FERFJFU1N9JwogICAgICAtICdTSUdOT1pfRU1BSUxJTkdfU01UUF9GUk9NPSR7U0lHTk9aX0VNQUlMSU5HX1NNVFBfRlJPTX0nCiAgICAgIC0gJ1NJR05PWl9FTUFJTElOR19TTVRQX0FVVEhfVVNFUk5BTUU9JHtTSUdOT1pfRU1BSUxJTkdfU01UUF9BVVRIX1VTRVJOQU1FfScKICAgICAgLSAnU0lHTk9aX0VNQUlMSU5HX1NNVFBfQVVUSF9QQVNTV09SRD0ke1NJR05PWl9FTUFJTElOR19TTVRQX0FVVEhfUEFTU1dPUkR9JwogICAgICAtIFNJR05PWl9BTEVSVE1BTkFHRVJfUFJPVklERVI9c2lnbm96CiAgICAgIC0gJ1NJR05PWl9BTEVSVE1BTkFHRVJfU0lHTk9aX0dMT0JBTF9TTVRQX19BVVRIX19QQVNTV09SRD0ke1NJR05PWl9BTEVSVE1BTkFHRVJfU0lHTk9aX0dMT0JBTF9TTVRQX19BVVRIX19QQVNTV09SRH0nCiAgICAgIC0gJ1NJR05PWl9BTEVSVE1BTkFHRVJfU0lHTk9aX0dMT0JBTF9TTVRQX19BVVRIX19VU0VSTkFNRT0ke1NJR05PWl9BTEVSVE1BTkFHRVJfU0lHTk9aX0dMT0JBTF9TTVRQX19BVVRIX19VU0VSTkFNRX0nCiAgICAgIC0gJ1NJR05PWl9BTEVSVE1BTkFHRVJfU0lHTk9aX0dMT0JBTF9TTVRQX19GUk9NPSR7U0lHTk9aX0FMRVJUTUFOQUdFUl9TSUdOT1pfR0xPQkFMX1NNVFBfX0ZST019JwogICAgICAtICdTSUdOT1pfQUxFUlRNQU5BR0VSX1NJR05PWl9HTE9CQUxfU01UUF9fU01BUlRIT1NUPSR7U0lHTk9aX0FMRVJUTUFOQUdFUl9TSUdOT1pfR0xPQkFMX1NNVFBfX1NNQVJUSE9TVH0nCiAgICAgIC0gRE9UX01FVFJJQ1NfRU5BQkVMRD10cnVlCiAgICBoZWFsdGhjaGVjazoKICAgICAgdGVzdDoKICAgICAgICAtIENNRAogICAgICAgIC0gd2dldAogICAgICAgIC0gJy0tc3BpZGVyJwogICAgICAgIC0gJy1xJwogICAgICAgIC0gJ2xvY2FsaG9zdDo4MDgwL2FwaS92MS9oZWFsdGgnCiAgICAgIGludGVydmFsOiAzMHMKICAgICAgdGltZW91dDogNXMKICAgICAgcmV0cmllczogMwogIG90ZWwtY29sbGVjdG9yOgogICAgaW1hZ2U6ICdzaWdub3ovc2lnbm96LW90ZWwtY29sbGVjdG9yOnYwLjEyOS43JwogICAgZGVwZW5kc19vbjoKICAgICAgY2xpY2tob3VzZToKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfaGVhbHRoeQogICAgICBzY2hlbWEtbWlncmF0b3Itc3luYzoKICAgICAgICBjb25kaXRpb246IHNlcnZpY2VfY29tcGxldGVkX3N1Y2Nlc3NmdWxseQogICAgICBzaWdub3o6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICAgIGNvbW1hbmQ6CiAgICAgIC0gJy0tY29uZmlnPS9ldGMvb3RlbC1jb2xsZWN0b3ItY29uZmlnLnlhbWwnCiAgICAgIC0gJy0tbWFuYWdlci1jb25maWc9L2V0Yy9tYW5hZ2VyLWNvbmZpZy55YW1sJwogICAgICAtICctLWNvcHktcGF0aD0vdmFyL3RtcC9jb2xsZWN0b3ItY29uZmlnLnlhbWwnCiAgICAgIC0gJy0tZmVhdHVyZS1nYXRlcz0tcGtnLnRyYW5zbGF0b3IucHJvbWV0aGV1cy5Ob3JtYWxpemVOYW1lJwogICAgdm9sdW1lczoKICAgICAgLQogICAgICAgIHR5cGU6IGJpbmQKICAgICAgICBzb3VyY2U6IC4vb3RlbC1jb2xsZWN0b3ItY29uZmlnLnlhbWwKICAgICAgICB0YXJnZXQ6IC9ldGMvb3RlbC1jb2xsZWN0b3ItY29uZmlnLnlhbWwKICAgICAgICBjb250ZW50OiAicmVjZWl2ZXJzOlxuICBvdGxwOlxuICAgIHByb3RvY29sczpcbiAgICAgIGdycGM6XG4gICAgICAgIGVuZHBvaW50OiAwLjAuMC4wOjQzMTdcbiAgICAgIGh0dHA6XG4gICAgICAgIGVuZHBvaW50OiAwLjAuMC4wOjQzMThcbiAgcHJvbWV0aGV1czpcbiAgICBjb25maWc6XG4gICAgICBnbG9iYWw6XG4gICAgICAgIHNjcmFwZV9pbnRlcnZhbDogNjBzXG4gICAgICBzY3JhcGVfY29uZmlnczpcbiAgICAgICAgLSBqb2JfbmFtZTogb3RlbC1jb2xsZWN0b3JcbiAgICAgICAgICBzdGF0aWNfY29uZmlnczpcbiAgICAgICAgICAtIHRhcmdldHM6XG4gICAgICAgICAgICAgIC0gbG9jYWxob3N0Ojg4ODhcbiAgICAgICAgICAgIGxhYmVsczpcbiAgICAgICAgICAgICAgam9iX25hbWU6IG90ZWwtY29sbGVjdG9yXG5wcm9jZXNzb3JzOlxuICBiYXRjaDpcbiAgICBzZW5kX2JhdGNoX3NpemU6IDEwMDAwXG4gICAgc2VuZF9iYXRjaF9tYXhfc2l6ZTogMTEwMDBcbiAgICB0aW1lb3V0OiAxMHNcbiAgcmVzb3VyY2VkZXRlY3Rpb246XG4gICAgIyBVc2luZyBPVEVMX1JFU09VUkNFX0FUVFJJQlVURVMgZW52dmFyLCBlbnYgZGV0ZWN0b3IgYWRkcyBjdXN0b20gbGFiZWxzLlxuICAgIGRldGVjdG9yczogW2Vudiwgc3lzdGVtXVxuICAgIHRpbWVvdXQ6IDJzXG4gIHNpZ25venNwYW5tZXRyaWNzL2RlbHRhOlxuICAgIG1ldHJpY3NfZXhwb3J0ZXI6IHNpZ25vemNsaWNraG91c2VtZXRyaWNzXG4gICAgbWV0cmljc19mbHVzaF9pbnRlcnZhbDogNjBzXG4gICAgbGF0ZW5jeV9oaXN0b2dyYW1fYnVja2V0czogWzEwMHVzLCAxbXMsIDJtcywgNm1zLCAxMG1zLCA1MG1zLCAxMDBtcywgMjUwbXMsIDUwMG1zLCAxMDAwbXMsIDE0MDBtcywgMjAwMG1zLCA1cywgMTBzLCAyMHMsIDQwcywgNjBzIF1cbiAgICBkaW1lbnNpb25zX2NhY2hlX3NpemU6IDEwMDAwMFxuICAgIGFnZ3JlZ2F0aW9uX3RlbXBvcmFsaXR5OiBBR0dSRUdBVElPTl9URU1QT1JBTElUWV9ERUxUQVxuICAgIGVuYWJsZV9leHBfaGlzdG9ncmFtOiB0cnVlXG4gICAgZGltZW5zaW9uczpcbiAgICAgIC0gbmFtZTogc2VydmljZS5uYW1lc3BhY2VcbiAgICAgICAgZGVmYXVsdDogZGVmYXVsdFxuICAgICAgLSBuYW1lOiBkZXBsb3ltZW50LmVudmlyb25tZW50XG4gICAgICAgIGRlZmF1bHQ6IGRlZmF1bHRcbiAgICAgICMgVGhpcyBpcyBhZGRlZCB0byBlbnN1cmUgdGhlIHVuaXF1ZW5lc3Mgb2YgdGhlIHRpbWVzZXJpZXNcbiAgICAgICMgT3RoZXJ3aXNlLCBpZGVudGljYWwgdGltZXNlcmllcyBwcm9kdWNlZCBieSBtdWx0aXBsZSByZXBsaWNhcyBvZlxuICAgICAgIyBjb2xsZWN0b3JzIHJlc3VsdCBpbiBpbmNvcnJlY3QgQVBNIG1ldHJpY3NcbiAgICAgIC0gbmFtZTogc2lnbm96LmNvbGxlY3Rvci5pZFxuICAgICAgLSBuYW1lOiBzZXJ2aWNlLnZlcnNpb25cbiAgICAgIC0gbmFtZTogYnJvd3Nlci5wbGF0Zm9ybVxuICAgICAgLSBuYW1lOiBicm93c2VyLm1vYmlsZVxuICAgICAgLSBuYW1lOiBrOHMuY2x1c3Rlci5uYW1lXG4gICAgICAtIG5hbWU6IGs4cy5ub2RlLm5hbWVcbiAgICAgIC0gbmFtZTogazhzLm5hbWVzcGFjZS5uYW1lXG4gICAgICAtIG5hbWU6IGhvc3QubmFtZVxuICAgICAgLSBuYW1lOiBob3N0LnR5cGVcbiAgICAgIC0gbmFtZTogY29udGFpbmVyLm5hbWVcbmV4dGVuc2lvbnM6XG4gIGhlYWx0aF9jaGVjazpcbiAgICBlbmRwb2ludDogMC4wLjAuMDoxMzEzM1xuICBwcHJvZjpcbiAgICBlbmRwb2ludDogMC4wLjAuMDoxNzc3XG5leHBvcnRlcnM6XG4gIGNsaWNraG91c2V0cmFjZXM6XG4gICAgZGF0YXNvdXJjZTogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel90cmFjZXNcbiAgICBsb3dfY2FyZGluYWxfZXhjZXB0aW9uX2dyb3VwaW5nOiAke2VudjpMT1dfQ0FSRElOQUxfRVhDRVBUSU9OX0dST1VQSU5HfVxuICAgIHVzZV9uZXdfc2NoZW1hOiB0cnVlXG4gIHNpZ25vemNsaWNraG91c2VtZXRyaWNzOlxuICAgIGRzbjogdGNwOi8vY2xpY2tob3VzZTo5MDAwL3NpZ25vel9tZXRyaWNzXG4gIGNsaWNraG91c2Vsb2dzZXhwb3J0ZXI6XG4gICAgZHNuOiB0Y3A6Ly9jbGlja2hvdXNlOjkwMDAvc2lnbm96X2xvZ3NcbiAgICB0aW1lb3V0OiAxMHNcbiAgICB1c2VfbmV3X3NjaGVtYTogdHJ1ZVxuc2VydmljZTpcbiAgdGVsZW1ldHJ5OlxuICAgIGxvZ3M6XG4gICAgICBlbmNvZGluZzoganNvblxuICBleHRlbnNpb25zOlxuICAgIC0gaGVhbHRoX2NoZWNrXG4gICAgLSBwcHJvZlxuICBwaXBlbGluZXM6XG4gICAgdHJhY2VzOlxuICAgICAgcmVjZWl2ZXJzOiBbb3RscF1cbiAgICAgIHByb2Nlc3NvcnM6IFtzaWdub3pzcGFubWV0cmljcy9kZWx0YSwgYmF0Y2hdXG4gICAgICBleHBvcnRlcnM6IFtjbGlja2hvdXNldHJhY2VzXVxuICAgIG1ldHJpY3M6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbc2lnbm96Y2xpY2tob3VzZW1ldHJpY3NdXG4gICAgbWV0cmljcy9wcm9tZXRoZXVzOlxuICAgICAgcmVjZWl2ZXJzOiBbcHJvbWV0aGV1c11cbiAgICAgIHByb2Nlc3NvcnM6IFtiYXRjaF1cbiAgICAgIGV4cG9ydGVyczogW3NpZ25vemNsaWNraG91c2VtZXRyaWNzXVxuICAgIGxvZ3M6XG4gICAgICByZWNlaXZlcnM6IFtvdGxwXVxuICAgICAgcHJvY2Vzc29yczogW2JhdGNoXVxuICAgICAgZXhwb3J0ZXJzOiBbY2xpY2tob3VzZWxvZ3NleHBvcnRlcl0iCiAgICAgIC0KICAgICAgICB0eXBlOiBiaW5kCiAgICAgICAgc291cmNlOiAuL290ZWwtY29sbGVjdG9yLW9wYW1wLWNvbmZpZy55YW1sCiAgICAgICAgdGFyZ2V0OiAvZXRjL21hbmFnZXItY29uZmlnLnlhbWwKICAgICAgICBjb250ZW50OiAic2VydmVyX2VuZHBvaW50OiB3czovL3NpZ25vejo0MzIwL3YxL29wYW1wXG4iCiAgICBlbnZpcm9ubWVudDoKICAgICAgLSBTRVJWSUNFX0ZRRE5fT1RFTENPTExFQ1RPUkhUVFBfNDMxOAogICAgICAtICdPVEVMX1JFU09VUkNFX0FUVFJJQlVURVM9aG9zdC5uYW1lPXNpZ25vei1ob3N0LG9zLnR5cGU9bGludXgnCiAgICAgIC0gTE9XX0NBUkRJTkFMX0VYQ0VQVElPTl9HUk9VUElORz1mYWxzZQogICAgaGVhbHRoY2hlY2s6CiAgICAgIHRlc3Q6ICdiYXNoIC1jICJleGVjIDY8PiAvZGV2L3RjcC9sb2NhbGhvc3QvMTMxMzMiJwogICAgICBpbnRlcnZhbDogMzBzCiAgICAgIHRpbWVvdXQ6IDVzCiAgICAgIHJldHJpZXM6IDMKICBzY2hlbWEtbWlncmF0b3Itc3luYzoKICAgIGltYWdlOiAnc2lnbm96L3NpZ25vei1zY2hlbWEtbWlncmF0b3I6djAuMTI5LjcnCiAgICBjb21tYW5kOgogICAgICAtIHN5bmMKICAgICAgLSAnLS1kc249dGNwOi8vY2xpY2tob3VzZTo5MDAwJwogICAgICAtICctLXVwPScKICAgIGRlcGVuZHNfb246CiAgICAgIGNsaWNraG91c2U6CiAgICAgICAgY29uZGl0aW9uOiBzZXJ2aWNlX2hlYWx0aHkKICAgIHJlc3RhcnQ6IG9uLWZhaWx1cmUKICAgIGV4Y2x1ZGVfZnJvbV9oYzogdHJ1ZQogICAgbG9nZ2luZzoKICAgICAgb3B0aW9uczoKICAgICAgICBtYXgtc2l6ZTogNTBtCiAgICAgICAgbWF4LWZpbGU6ICczJwogIHNjaGVtYS1taWdyYXRvci1hc3luYzoKICAgIGltYWdlOiAnc2lnbm96L3NpZ25vei1zY2hlbWEtbWlncmF0b3I6djAuMTI5LjcnCiAgICBkZXBlbmRzX29uOgogICAgICBjbGlja2hvdXNlOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9oZWFsdGh5CiAgICAgIHNjaGVtYS1taWdyYXRvci1zeW5jOgogICAgICAgIGNvbmRpdGlvbjogc2VydmljZV9jb21wbGV0ZWRfc3VjY2Vzc2Z1bGx5CiAgICByZXN0YXJ0OiBvbi1mYWlsdXJlCiAgICBleGNsdWRlX2Zyb21faGM6IHRydWUKICAgIGxvZ2dpbmc6CiAgICAgIG9wdGlvbnM6CiAgICAgICAgbWF4LXNpemU6IDUwbQogICAgICAgIG1heC1maWxlOiAnMycKICAgIGNvbW1hbmQ6CiAgICAgIC0gYXN5bmMKICAgICAgLSAnLS1kc249dGNwOi8vY2xpY2tob3VzZTo5MDAwJwogICAgICAtICctLXVwPScK", + "tags": [ + "telemetry", + "server", + "applications", + "interface", + "logs", + "monitoring", + "traces", + "metrics" + ], + "category": null, + "logo": "svgs/signoz.svg", + "minversion": "0.0.0", + "port": "8080" + }, "slash": { "documentation": "https://github.com/yourselfhosted/slash?utm_source=coolify.io", "slogan": "An open source, self-hosted links shortener and sharing platform.", diff --git a/tests/Feature/TrustHostsMiddlewareTest.php b/tests/Feature/TrustHostsMiddlewareTest.php index f875a235e..b745259fe 100644 --- a/tests/Feature/TrustHostsMiddlewareTest.php +++ b/tests/Feature/TrustHostsMiddlewareTest.php @@ -227,3 +227,84 @@ // Should only contain APP_URL pattern, not any FQDN expect($hosts2)->not->toBeEmpty(); }); + +it('skips host validation for terminal auth routes', function () { + // These routes should be accessible with any Host header (for internal container communication) + $response = $this->postJson('/terminal/auth', [], [ + 'Host' => 'coolify:8080', // Internal Docker host + ]); + + // Should not get 400 Bad Host (might get 401 Unauthorized instead) + expect($response->status())->not->toBe(400); +}); + +it('skips host validation for terminal auth ips route', function () { + // These routes should be accessible with any Host header (for internal container communication) + $response = $this->postJson('/terminal/auth/ips', [], [ + 'Host' => 'soketi:6002', // Another internal Docker host + ]); + + // Should not get 400 Bad Host (might get 401 Unauthorized instead) + expect($response->status())->not->toBe(400); +}); + +it('still enforces host validation for non-terminal routes', function () { + InstanceSettings::updateOrCreate( + ['id' => 0], + ['fqdn' => 'https://coolify.example.com'] + ); + + // Regular routes should still validate Host header + $response = $this->get('/', [ + 'Host' => 'evil.com', + ]); + + // Should get 400 Bad Host for untrusted host + expect($response->status())->toBe(400); +}); + +it('skips host validation for API routes', function () { + // All API routes use token-based auth (Sanctum), not host validation + // They should be accessible from any host (mobile apps, CLI tools, scripts) + + // Test health check endpoint + $response = $this->get('/api/health', [ + 'Host' => 'internal-lb.local', + ]); + expect($response->status())->not->toBe(400); + + // Test v1 health check + $response = $this->get('/api/v1/health', [ + 'Host' => '10.0.0.5', + ]); + expect($response->status())->not->toBe(400); + + // Test feedback endpoint + $response = $this->post('/api/feedback', [], [ + 'Host' => 'mobile-app.local', + ]); + expect($response->status())->not->toBe(400); +}); + +it('skips host validation for webhook endpoints', function () { + // All webhook routes are under /webhooks/* prefix (see RouteServiceProvider) + // and use cryptographic signature validation instead of host validation + + // Test GitHub webhook + $response = $this->post('/webhooks/source/github/events', [], [ + 'Host' => 'github-webhook-proxy.local', + ]); + expect($response->status())->not->toBe(400); + + // Test GitLab webhook + $response = $this->post('/webhooks/source/gitlab/events/manual', [], [ + 'Host' => 'gitlab.example.com', + ]); + expect($response->status())->not->toBe(400); + + // Test Stripe webhook + $response = $this->post('/webhooks/payments/stripe/events', [], [ + 'Host' => 'stripe-webhook-forwarder.local', + ]); + expect($response->status())->not->toBe(400); +}); diff --git a/tests/Unit/ApplicationDeploymentEmptyEnvTest.php b/tests/Unit/ApplicationDeploymentEmptyEnvTest.php new file mode 100644 index 000000000..8649b8f9b --- /dev/null +++ b/tests/Unit/ApplicationDeploymentEmptyEnvTest.php @@ -0,0 +1,63 @@ +toBeTrue("Build pack '{$buildPack}' should require empty .env file"); + } + + foreach ($buildPacksNotRequiringEnvFile as $buildPack) { + // These build packs also use env_file but call save_runtime_environment_variables() + // after generate_compose_file(), so they handle empty env files themselves + $requiresEnvFile = ($buildPack === 'dockercompose' || $buildPack === 'dockerimage'); + expect($requiresEnvFile)->toBeFalse("Build pack '{$buildPack}' should not match the condition"); + } +}); + +it('verifies dockerimage build pack is included in empty env file creation logic', function () { + $buildPack = 'dockerimage'; + $shouldCreateEmptyEnvFile = ($buildPack === 'dockercompose' || $buildPack === 'dockerimage'); + + expect($shouldCreateEmptyEnvFile)->toBeTrue( + 'dockerimage build pack should create empty .env file when no environment variables are defined' + ); +}); + +it('verifies dockercompose build pack is included in empty env file creation logic', function () { + $buildPack = 'dockercompose'; + $shouldCreateEmptyEnvFile = ($buildPack === 'dockercompose' || $buildPack === 'dockerimage'); + + expect($shouldCreateEmptyEnvFile)->toBeTrue( + 'dockercompose build pack should create empty .env file when no environment variables are defined' + ); +}); + +it('verifies other build packs are not included in empty env file creation logic', function () { + $otherBuildPacks = ['dockerfile', 'nixpacks', 'static', 'buildpack']; + + foreach ($otherBuildPacks as $buildPack) { + $shouldCreateEmptyEnvFile = ($buildPack === 'dockercompose' || $buildPack === 'dockerimage'); + + expect($shouldCreateEmptyEnvFile)->toBeFalse( + "Build pack '{$buildPack}' should not create empty .env file in save_runtime_environment_variables()" + ); + } +}); diff --git a/versions.json b/versions.json index dc63e2793..c7e173833 100644 --- a/versions.json +++ b/versions.json @@ -1,10 +1,10 @@ { "coolify": { "v4": { - "version": "4.0.0-beta.436" + "version": "4.0.0-beta.438" }, "nightly": { - "version": "4.0.0-beta.437" + "version": "4.0.0-beta.439" }, "helper": { "version": "1.0.11"