diff --git a/clusters/homelab/longhorn.yaml b/clusters/homelab/longhorn.yaml new file mode 100644 index 0000000..b67dbcc --- /dev/null +++ b/clusters/homelab/longhorn.yaml @@ -0,0 +1,12 @@ +apiVersion: kustomize.toolkit.fluxcd.io/v1 +kind: Kustomization +metadata: + name: longhorn + namespace: flux-system +spec: + interval: 10m + path: ./clusters/homelab/longhorn + prune: true + sourceRef: + kind: GitRepository + name: flux-system diff --git a/clusters/homelab/longhorn/helmrelease.yaml b/clusters/homelab/longhorn/helmrelease.yaml new file mode 100644 index 0000000..84d8e6b --- /dev/null +++ b/clusters/homelab/longhorn/helmrelease.yaml @@ -0,0 +1,16 @@ +# clusters/homelab/longhorn/helmrelease.yaml +apiVersion: helm.toolkit.fluxcd.io/v2 +kind: HelmRelease +metadata: + name: longhorn + namespace: longhorn-system +spec: + interval: 1h + chart: + spec: + chart: longhorn + version: "1.8.x" + sourceRef: + kind: HelmRepository + name: longhorn + namespace: longhorn-system diff --git a/clusters/homelab/longhorn/helmrepository.yaml b/clusters/homelab/longhorn/helmrepository.yaml new file mode 100644 index 0000000..95cc8a0 --- /dev/null +++ b/clusters/homelab/longhorn/helmrepository.yaml @@ -0,0 +1,9 @@ +# clusters/homelab/longhorn/helmrepository.yaml +apiVersion: source.toolkit.fluxcd.io/v1 +kind: HelmRepository +metadata: + name: longhorn + namespace: longhorn-system +spec: + interval: 1h + url: https://charts.longhorn.io diff --git a/clusters/homelab/longhorn/kustomization.yaml b/clusters/homelab/longhorn/kustomization.yaml new file mode 100644 index 0000000..4348288 --- /dev/null +++ b/clusters/homelab/longhorn/kustomization.yaml @@ -0,0 +1,6 @@ +apiVersion: kustomize.config.k8s.io/v1beta1 +kind: Kustomization +resources: + - namespaces.yaml + - helmrepository.yaml + - helmrelease.yaml diff --git a/clusters/homelab/longhorn/namespaces.yaml b/clusters/homelab/longhorn/namespaces.yaml new file mode 100644 index 0000000..4908399 --- /dev/null +++ b/clusters/homelab/longhorn/namespaces.yaml @@ -0,0 +1,5 @@ +# clusters/homelab/longhorn/namespace.yaml +apiVersion: v1 +kind: Namespace +metadata: + name: longhorn-system diff --git a/talos/.gitignore b/talos/.gitignore new file mode 100644 index 0000000..d4c1691 --- /dev/null +++ b/talos/.gitignore @@ -0,0 +1,2 @@ +talsecret.yaml +clusterconfig/ diff --git a/talos/talconfig.yaml b/talos/talconfig.yaml new file mode 100644 index 0000000..36c997d --- /dev/null +++ b/talos/talconfig.yaml @@ -0,0 +1,44 @@ +clusterName: homelab +talosVersion: v1.12.5 +kubernetesVersion: v1.32.0 +endpoint: https://192.168.2.111:6443 +allowSchedulingOnMasters: true +cniConfig: + name: none +nodes: + - hostname: op-01 + ipAddress: 192.168.2.111 + controlPlane: true + installDisk: /dev/sda + schematic: + customization: + systemExtensions: + officialExtensions: + - siderolabs/i915 + - siderolabs/intel-ucode + # - siderolabs/tailscale + - siderolabs/util-linux-tools + - hostname: op-02 + ipAddress: 192.168.2.109 + controlPlane: true + installDisk: /dev/sda + schematic: + customization: + systemExtensions: + officialExtensions: + - siderolabs/i915 + - siderolabs/intel-ucode + # - siderolabs/tailscale + - siderolabs/util-linux-tools + - hostname: op-03 + ipAddress: 192.168.2.110 + controlPlane: true + installDisk: /dev/sda + schematic: + customization: + systemExtensions: + officialExtensions: + - siderolabs/i915 + - siderolabs/intel-ucode + # - siderolabs/tailscale + - siderolabs/util-linux-tools diff --git a/talos/talsecret.sops.yaml b/talos/talsecret.sops.yaml new file mode 100644 index 0000000..37f42e8 --- /dev/null +++ b/talos/talsecret.sops.yaml @@ -0,0 +1,23 @@ +cluster: + id: xSMIRQSFrt27p8N_HP6S-jZLTjQuq7pLOJZ-rnzA4Cs= + secret: 0o1ZCOS8LfP8iYCFYgE+IHBUId6sww4jZj+Yq/N6tzc= +secrets: + bootstraptoken: u7loyw.7sfstdnw3rfsthb1 + secretboxencryptionsecret: Ir5/OQ9odeKGaCC79ThGeHtybXUsV1193aVHcuvrmQM= +trustdinfo: + token: c4j7sz.4osze2m8f28i4wmt +certs: + etcd: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJmVENDQVNTZ0F3SUJBZ0lSQU1ObjJNYUpnNG1IaVdvdlBVUW1FN2t3Q2dZSUtvWkl6ajBFQXdJd0R6RU4KTUFzR0ExVUVDaE1FWlhSalpEQWVGdzB5TmpBek1UVXdPREUzTlRoYUZ3MHpOakF6TVRJd09ERTNOVGhhTUE4eApEVEFMQmdOVkJBb1RCR1YwWTJRd1dUQVRCZ2NxaGtqT1BRSUJCZ2dxaGtqT1BRTUJCd05DQUFRYVgvV3NISzl3Ck52ek4ycXBJWnF1OEpkSDdPSThjL3JhOFVaY3p1RXRWVWZYQlRFc1FENzY2bnFhVXhTSUlTRE5FNFNpZTB2R1IKUzNJeksyOHQwaE5kbzJFd1h6QU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSApBd0VHQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFRlBTT2NPazNweXZZCmFxZHRHWDdja1A0SmxJOWZNQW9HQ0NxR1NNNDlCQU1DQTBjQU1FUUNJRGY0cGVXa05GMUZOeTVwV01lYy9DMlUKVFZ3RWNsQlMwUWxUY3NaRmhWSVJBaUF1SmN0MEp3ekR3MkdCYm9sMWh2bjE4VGtSbm93RTMwZ3BOcjdURGNJOQpidz09Ci0tLS0tRU5EIENFUlRJRklDQVRFLS0tLS0K + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSU5ibWVYb2UyeHNIYzYzVmhVZTBwVW9HNXZhY0VxU3hncDJSRGM4TzdOZXpvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFR2wvMXJCeXZjRGI4emRxcVNHYXJ2Q1hSK3ppUEhQNjJ2RkdYTTdoTFZWSDF3VXhMRUErKwp1cDZtbE1VaUNFZ3pST0VvbnRMeGtVdHlNeXR2TGRJVFhRPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + k8s: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJpVENDQVMrZ0F3SUJBZ0lRQ3QzeDdXODk1QjBZZDBGSm00UlY0ekFLQmdncWhrak9QUVFEQWpBVk1STXcKRVFZRFZRUUtFd3ByZFdKbGNtNWxkR1Z6TUI0WERUSTJNRE14TlRBNE1UYzFPRm9YRFRNMk1ETXhNakE0TVRjMQpPRm93RlRFVE1CRUdBMVVFQ2hNS2EzVmlaWEp1WlhSbGN6QlpNQk1HQnlxR1NNNDlBZ0VHQ0NxR1NNNDlBd0VICkEwSUFCQi8yWm9uT0lvNXR1a3pJdDZUZjZGSlE1d2xPaEhQUEVsQ2FuTVZiaXppcmUxeU5pMmw1Ry9rUmFhTlYKOEc4WVlPb083VzNTMEQzU1BnKzA1VVNPa3llallUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ2hEQWRCZ05WSFNVRQpGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZEJnTlZIUTRFCkZnUVVjTzdPZlBlL0RrcUc1ZVNoWjVweEhPNDQrRVF3Q2dZSUtvWkl6ajBFQXdJRFNBQXdSUUloQUl3bTFad1kKVXNFVXQxZmdTVEFNb0lPMHI3ckhBUDlRY3BrdVFld3lkcTFIQWlCbDVlNFV2ZDRGYUNWZjVqTVFaVlJHcC92bgpCMXIwSEcxbGRBUy9EcTcrL0E9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUVraXJBc0owQ3YxR1RoaGhjNXM4clhGY2NoMlB5RGRIZ3ExWVdrb3pTeENvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFSC9abWljNGlqbTI2VE1pM3BOL29VbERuQ1U2RWM4OFNVSnFjeFZ1TE9LdDdYSTJMYVhrYgorUkZwbzFYd2J4aGc2Zzd0YmRMUVBkSStEN1RsUkk2VEp3PT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + k8saggregator: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJZRENDQVFXZ0F3SUJBZ0lRYkZjMDRZSkh3dTg5REJOYUIwWFF3REFLQmdncWhrak9QUVFEQWpBQU1CNFgKRFRJMk1ETXhOVEE0TVRjMU9Gb1hEVE0yTURNeE1qQTRNVGMxT0Zvd0FEQlpNQk1HQnlxR1NNNDlBZ0VHQ0NxRwpTTTQ5QXdFSEEwSUFCQXZSbEFOcTJZZkRQRU01NjNYWHdUbjNzOFhaaFF0b3RISGxaWEQvdG8vNEpkUmkwbHkzClJGdld4Y2g5d0NVMU9iOTBzSkViMUtYUG53eEVnU1VRcHdpallUQmZNQTRHQTFVZER3RUIvd1FFQXdJQ2hEQWQKQmdOVkhTVUVGakFVQmdnckJnRUZCUWNEQVFZSUt3WUJCUVVIQXdJd0R3WURWUjBUQVFIL0JBVXdBd0VCL3pBZApCZ05WSFE0RUZnUVVRRFpqV1ZLTmJRMzBodzBIdmd3Y0ZWM25zcE13Q2dZSUtvWkl6ajBFQXdJRFNRQXdSZ0loCkFJTjBjNVN6QW1SOEM5N3N2VDVsa2RRL2FlTnRBL0c5SGR3dFVPZWVEbVgyQWlFQWcwM21WU1hVTFRTNXZKcm4KM2I1NEZHcXFvaDVTUkxGZEtqZG03alBaUzIwPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFQyBQUklWQVRFIEtFWS0tLS0tCk1IY0NBUUVFSUtRa2p0TkxOaTNVbTZaNEs3Y3NRRHlJM2FuNzE0ME5pdUVnRE5BZklKaFlvQW9HQ0NxR1NNNDkKQXdFSG9VUURRZ0FFQzlHVUEyclpoOE04UXpucmRkZkJPZmV6eGRtRkMyaTBjZVZsY1ArMmovZ2wxR0xTWExkRQpXOWJGeUgzQUpUVTV2M1N3a1J2VXBjK2ZERVNCSlJDbkNBPT0KLS0tLS1FTkQgRUMgUFJJVkFURSBLRVktLS0tLQo= + k8sserviceaccount: + key: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlKSndJQkFBS0NBZ0VBOHBpRUliRmxEKzVoWHI2OWhwbS9IZU9mVW5iUW93MG9WVGFGOEhOUTJJSFJ2bzh5Ckh5Rnh3bE5BTlFnNkgyNXp0eElTUmNrL2paS0xVTkNUZW53TTBMQW1hbjg2bVIzVms0VG1lSFFiRlpWOCtpbkgKQWFsa2RSL1ZwTjVCR0d4OXdoUHVxZUZOOEhEdXdTQVllVTBrQytnSStPcUo4VmE5MFhwV3pMVVM3V0V2bEpxMQpWSndvZkJKdlVBdlE3azR3ZlcrK2Y0R3lzUHNwYnR6V2p3UWVCait0Vk15aWIxZWd4UitralNUSjZQNm93a0NnCjV5MXkrOXNQOXhZY2tnaXpjUHhaekRCc2F2ZHhUR2FvOWZUVy8xTnpxc25nUmpnMzl6blYwU3I1RGprSXdCbWIKMW9lOFhkVlFkQ0x0V2pWbGFuWDVTVGhsbkZQWEhCNFlicjhMU3VhRGRyRVl6dm9DVDRzY2NhSmU3MXAvZUwxYgoySWNua1RuY1l3ckYvODBsczNoOForTXdJVkVaUW1hMlRlc05EYzFZT2Rtb2wxZ2tNdW5hWkIwN2JoQmRVd2F6CkVYcVJXVXBCRUFGVEEwNXNYbGFjUmNXK2M3QTFlMDZRRUxGS2hNdCt6YWdkM1B5cUQwOUhyM0FnQUNjNUVoblMKMU9CVW9OaTRZdkwraDU2UHpwMW5LenFoc0lYelQyRjZWS21aQUFSazBzbVEvOThEaFFLRVBMSno3dVhCSXZzbwo2NFVlRVNSWXRld3lMcjlBTzBiemlxUDlwdEhNNnYzbVZxcm4rMUZ1cWJtZ3RhN2hHeHhGQnVBbk03WDYwSVNDCnBkWnVtSWZUaGNVdzE2YTJ1R0ozbFRUbDA2cjhDOUhPTGMweVlmOERjY0o1ZnZTM2o5bzFrdmV0YVo4Q0F3RUEKQVFLQ0FnQlRxeXh2SG1xWHF3U2tFNjcwSEZTZzcxK0VwbnZnc0dvSHNhMVNOOE5iV0xMSlFVUHRIckRJYjhRRwpSbGNkZmcra3hUUE9JOUdxZHk5YmFRUmtTeUowV3p4MG9IcktVbExWOVJFejIvOTNXejVtWFVCSW4yNkpRcmlCCml6SHlSWUMrRGZmVFdXUnpGOUFRaFl4TFVjS3I1SlFybldDRC93R3FuTUlSQ2lhRC9tL1ZsZUlTVTJWWEhWaU0KeC9hQUtqRnBJY0FXNDltSVZxZDhsK2ZjSFhScGZVNi9uM0FxYkpPRFNSMk1uSEtTekRuUi9VNUJUUmlLS295QQpFSDA4RklvbTNySHR6WW1tL3I1eHRqcHgwY2JRK3F3NjdETlFwSlVRekQ2bFRHZm5jdDVFdXRCWGxpcnVSZUxnCm15YzNaSkVjdmFHRGtsTGhMcjFTOGtKRTk5amhpV1lhUVBYdGRhOXdOZEJicFVDc0hDTmU3ZFBtVm9KbHVZbkcKa0VHUzhzQ2hidEpyU1g4MTdvb1NGcWJnMUJUbHYzNUpraGZiZCtXcXN1YzdUMlcrelVmbXFkOTNjVnYzOG5FVgpqa3J5NmsyczhIVkt0U3pSOUVpL1RqNVltWk96K0p6ZmhPTktYZVdHdkYrQjMxWURMTGpCcjVCeFFYaUV4SHRPCnk3WTVtc2xNbldxVlRhSUt3SjRsRXF5dnpUZWo2cjdnYTJJenRoNS9EZ2d2MjU3RUxKaTBEMUs5Q2hyS3I1M3kKN24zQzd6UHFIL0dLcXhFZi9pMlNQWi9NcEFrQkpUaU0zdms3bnVJbE9mVC9UZnI1N2EzNHVaOGVDa2RQbEdJeApmbFFraEZSQVZLUk9hQ0R5UVVjNFJqVjk0WW1NTmFhem5mZWdpbGtZLy9nUzZBemFNUUtDQVFFQSttUzJHWmJaCmJjdDQ3UDZBdEFzQ3hUNG44ZmNGaTkyTFA2MXdCZEsyUjk4R3FlQXJPSEpkUWlHOVFOOWVGei9TYjkybDVlSmIKN0p0eGxEdEtnQk9nVFZ6MTNpWGdJTVg4cjRpRHdxdU03TGZ3cHJpTEFaUUVtNysvaUJXMUJ6NTE3anhHcFZydwo4eGJWY09TYnV6U0VQRjcyaWpza3FaSDVKczNldVBvUDhld2hMZWZiZHdNb25xOHhmbnhiN3BQVkhZSzlyYjk1ClJYbGlWUkdSSnIzVU9JSktlMnRZbGVHTkVBUEdMZVlvckdOV2gwaEhmY2t0TGdLMVh0ZVhrODZjR3ZMbDdweXAKYUZmYlF5Z3hOdlFTRzhyQWtJQWZhUFd6VmZRWnRnd2tRTkdpSlJUTi9idlR6d0d1cnV1YVlPVGlIQWNuRUVyRwo4UU9ZYUtPSkR1d1J0d0tDQVFFQStBY2Jrb0xIL09XazJVRW8yZnVjbk44K1hXNnRBeSt6QVJZbjJyeXV2SnVtCndQK0tuOUZEcGR5NktBTzV0bWNWMDV1ZGJZQW05OXhtMjBIRm4vOW00MVE0d21tdXNtR1M5dFdXYVVHdmJYRnUKem92V3BUcUp0THlNUUhaUkJNeGdva21heHZsWEdXdlpsbzRpcUtIdGZFbjk3YnR5UXhYbDM5U2V6dkVlaERyQwp4dDBBdXJhU1N3bVFzRGg4dnlZdVgrUkhIdnVSQ2VQMW5mT0pyQTBXOVMySVFTVDIyb2pWR2JvZ29lVWZjYlU1CjkzUDJVWTA1ZHJIcEhNbEs5NlBDN0h1Mzdja0ZsS0dOdVZvcFhCeTlyWEZsbzNCaER4UDEwRHdHT01nWEkrRHYKSWUrWHlmU1g1V0pya216cnpJaklSNTRPbDlNRXNQaWUxQ3hWVU5ySFdRS0NBUUFhcUJnZTEwbGtmL0hxd1JsdwprVytGRWgzc2k1RENtQjVYOUIzbDhNM0pEdnhGbjREYWJJcHpIT1pwL3Aya3VmMnNQUnVKUXJUb2xvL2I2UWdBClpKWi9SZk5DNkNOWk9kcXgwVVc5dHNlMDk4d2Q0NjJneUdKSk5udXNnQ3NhajFLOHZ4d0NSSkU4UCtVUE5MZEQKa2M2MklxSDZpMXRXMWh5QlBnK0UvOUlzdmllMkhHWG40S1UxWjQ5TVdPN3NrajV3K3RjNHBSYkRCNjRwUWtxQwpwbGp1Znlod3hUZlVGUVFRZldaZXdvNzM4MGRsOVpMdTJEa0FHZmUzRmhxaitLM3p6SUlnQ2Z1YkNTZGxtZVRMClplWjdvUFVwTFFxckFPVkx0RVg4ZElSemhoM045czRMUWpERmEvZHQxZFZFbFhsZzVINExKUHJTODhBSSs4ZisKbDdFM0FvSUJBR0phVHpDMTg1L3hZSUZXT1dEWFNhOWJSMXU5ZTVYNzREdmFFVXZIN25LVU5uZnAzWXFxYk96awpybDBYdlJqN244Z2R1VHVteWMwWDlTR1UzMDBtOWlISFVBcW41Y0tPdHJ4eXpnWkhLYzE0WWJ3OTc0dnR2cFdRCi92ekE3amU4NDhUMjh3MWI2cElHRm02QlJuVWdZUkFjTnptQ1R6a1RBZWpVWTNVa1lEbUhJNTNBSFgzc3orNDUKaU1xWVc3OWc0SnJkNXVYK1UvRmNHQlhlY1FWczIyRzJBSVgwcG43YUs4YmI2L3pHNHNVd1hDQW9OOUQyODRhQgozakt3RDY1TG5nd3dzeXJ6ditiRWVYSzZzaFA0d2E1NWZSaG1nOVo2ejhzWFFsQlo1L011U3lWbDRRY1FtdnMzCkgva2NnQlRIV01RdGhSUG5kY0RIbGhRRTBJQVRnV0VDZ2dFQVVTUGNDeHNjSGNYc0tlT01MRVR6YjloZ2xTMUEKeFNLS2k2V3cyaVdXWFBpVG9obEZZZUgrNkphMWFLVkh6ZUhSc3BSVjZvWTFnaDk5OEc5UVp5bGV5alo2MGhubwpCcERMS2ZTUnViT1pDYWF6Rk1EOHNuZE1wWWZleFI0WGc5S0c4MWZhbFk5RGhHOWM4SnNLMDArcXVpU1ZEQlZmCituYUhra0JHMnlnbm9qK3Fkd1FqL1hiUGJGMVZ0ZU5oVW9iU1EyRG1XK1RlemRTa0Y2Sk5yaFF5VzN0TTlaM1EKam4yNi92MGE5TE1MeDZvdGM2VHJId09jMU5iRXNuT2NJeFVSN2dpaTE0TExhaFZmQmVWdEtDcTFCYTMrNmR1ego0L1ZoblBaOXRYc1FaQzVycnJtNnE3OGY2MnFaaW5hUXlqM1R0T3VNcHdrSDR3OWxIUG84S0JmZUFBPT0KLS0tLS1FTkQgUlNBIFBSSVZBVEUgS0VZLS0tLS0K + os: + crt: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUJQekNCOHFBREFnRUNBaEVBbk44a01sK2VSOXAzSW9JVS9jM0RJekFGQmdNclpYQXdFREVPTUF3R0ExVUUKQ2hNRmRHRnNiM013SGhjTk1qWXdNekUxTURneE56VTVXaGNOTXpZd016RXlNRGd4TnpVNVdqQVFNUTR3REFZRApWUVFLRXdWMFlXeHZjekFxTUFVR0F5dGxjQU1oQU5ZenFjQUFWZVNpcENHNWRvUGpXdGdHWnZibEJ3UmtXcC9PCk53NG9IQzZqbzJFd1h6QU9CZ05WSFE4QkFmOEVCQU1DQW9Rd0hRWURWUjBsQkJZd0ZBWUlLd1lCQlFVSEF3RUcKQ0NzR0FRVUZCd01DTUE4R0ExVWRFd0VCL3dRRk1BTUJBZjh3SFFZRFZSME9CQllFRkNnS2FWdkpHR1pqMUtIUQpjM0I4L3M4dGo0UWtNQVVHQXl0bGNBTkJBUGROWTFtbjFGOWg2ZDAyT2xGaHdWTmNZMjAyTC94L1BkOWF6cXhuCmNUaDZDZFhoMXZYbDhKaWRWVDlsbGM5OWdWeUJrRWxMaGpOMjRZeDB4SUxnWFFNPQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + key: LS0tLS1CRUdJTiBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0KTUM0Q0FRQXdCUVlESzJWd0JDSUVJTExSM0JJeWxBV2p0KzRPcEhUSFgxK0tkMnYxRGVIdmNpYmh3aVZiNlcrbQotLS0tLUVORCBFRDI1NTE5IFBSSVZBVEUgS0VZLS0tLS0K