Compare commits

..

6 Commits

Author SHA1 Message Date
chatton 9aa39cb7d2
chore: bump portainer version 17 hours ago
chatton e17cbfd6f3
chore: disabling dailing claude greeting 2 months ago
chatton 6512f3059e
chore: add lidarr 4 months ago
chatton 1148d61281
bumping arr versions, plex and overseerr 7 months ago
chatton fb417af148
wireguard easy 7 months ago
chatton 641fead571
nzbget 7 months ago

@ -47,6 +47,7 @@ directories:
music_dir: /mnt/mergerfs/media/music music_dir: /mnt/mergerfs/media/music
# path on qnap where tv shows are stored # path on qnap where tv shows are stored
tv_dir: /mnt/mergerfs/media/tv tv_dir: /mnt/mergerfs/media/tv
exercise_dir: /mnt/mergerfs/media/exercise
# path on qnap where docker compose files are stored # path on qnap where docker compose files are stored
docker_compose_directory: /etc/docker-compose docker_compose_directory: /etc/docker-compose
# path where photoprism photos are stored # path where photoprism photos are stored

@ -1,7 +1,7 @@
--- ---
vault_file: vault_vars/qnap-vault.yml vault_file: vault_vars/qnap-vault.yml
portainer_endpoint: 34 portainer_endpoint: 36
services: [] services: []
ansible_pull_path: /usr/local/bin/ansible-pull ansible_pull_path: /usr/local/bin/ansible-pull

@ -68,4 +68,7 @@ portainer_roles:
- role: portainer_pihole - role: portainer_pihole
- role: portainer_nginx_proxy_manager - role: portainer_nginx_proxy_manager
# - role: portainer_minio # - role: portainer_minio
# - role: portainer_wireguard_easy - role: portainer_wireguard_easy
# WireGuard Easy configuration
wireguard_easy_host: "remote.cianhatton.ie"

@ -0,0 +1,8 @@
---
- name: send daily greeting to claude
hosts: dell
gather_facts: true
vars_files:
- ../vault_vars/qnap-vault.yml
roles:
- role: ../roles/claude_daily_greeting

@ -0,0 +1,7 @@
---
# default message to send to Claude
claude_message: "hello"
# claude API endpoint
claude_api_url: "https://api.anthropic.com/v1/messages"
# claude model to use
claude_model: "claude-3-5-sonnet-20241022"

@ -0,0 +1,29 @@
---
- name: ensure claude config directory exists
ansible.builtin.file:
path: "{{ ansible_env.HOME }}/.claude"
state: directory
mode: '0700'
- name: write claude oauth token to sandbox volume
ansible.builtin.shell: |
docker volume create docker-claude-sandbox-data 2>/dev/null || true
docker run --rm -v docker-claude-sandbox-data:/data alpine sh -c "mkdir -p /data/.claude && echo '{{ claude_oath_token }}' > /data/.claude/session_token && chmod 600 /data/.claude/session_token"
changed_when: true
- name: send message to claude via docker sandbox
ansible.builtin.shell: docker sandbox run --credentials=sandbox claude -- claude -p "{{ claude_message }}"
register: claude_response
changed_when: false
- name: display claude response
ansible.builtin.debug:
msg: "{{ claude_response.stdout }}"
- name: ensure cron job for daily claude greeting
ansible.builtin.cron:
name: "daily claude greeting"
minute: "0"
hour: "6"
job: "docker sandbox run --credentials=sandbox claude -- claude -p '{{ claude_message }}'"
state: absent

@ -19,7 +19,7 @@ qbittorrent_exposed_download_port: 6881
# Radarr # Radarr
# https://docs.linuxserver.io/images/docker-radarr/ # https://docs.linuxserver.io/images/docker-radarr/
radarr_image: lscr.io/linuxserver/radarr radarr_image: lscr.io/linuxserver/radarr
radarr_tag: 5.3.6 radarr_tag: 5.26.2.10099-ls281
radarr_container_name: radarr radarr_container_name: radarr
radarr_exposed_port: 7878 radarr_exposed_port: 7878
radarr_puid: 1000 radarr_puid: 1000
@ -28,12 +28,22 @@ radarr_pgid: 1000
# Sonarr # Sonarr
# https://docs.linuxserver.io/images/docker-sonarr/ # https://docs.linuxserver.io/images/docker-sonarr/
sonarr_image: lscr.io/linuxserver/sonarr sonarr_image: lscr.io/linuxserver/sonarr
sonarr_tag: 4.0.3 sonarr_tag: 4.0.15.2941-ls290
sonarr_exposed_port: 8989 sonarr_exposed_port: 8989
sonarr_container_name: sonarr sonarr_container_name: sonarr
sonarr_puid: 1000 sonarr_puid: 1000
sonarr_pgid: 1000 sonarr_pgid: 1000
# Lidarr
# https://docs.linuxserver.io/images/docker-lidarr/
#lidarr_image: lscr.io/linuxserver/lidarr
lidarr_image: blampe/lidarr
lidarr_tag: latest
lidarr_exposed_port: 8686
lidarr_container_name: lidarr
lidarr_puid: 1000
lidarr_pgid: 1000
# Jackett # Jackett
# https://github.com/Jackett/Jackett/releases # https://github.com/Jackett/Jackett/releases
jackett_image: lscr.io/linuxserver/jackett jackett_image: lscr.io/linuxserver/jackett

@ -8,8 +8,10 @@
- name: "{{ arr_portainer_stack_name }}_qbittorrent_config" - name: "{{ arr_portainer_stack_name }}_qbittorrent_config"
- name: "{{ arr_portainer_stack_name }}_radarr_config" - name: "{{ arr_portainer_stack_name }}_radarr_config"
- name: "{{ arr_portainer_stack_name }}_sonarr_config" - name: "{{ arr_portainer_stack_name }}_sonarr_config"
- name: "{{ arr_portainer_stack_name }}_lidarr_config"
- name: "{{ arr_portainer_stack_name }}_jackett_config" - name: "{{ arr_portainer_stack_name }}_jackett_config"
- name: "{{ arr_portainer_stack_name }}_gluetun" - name: "{{ arr_portainer_stack_name }}_gluetun"
- name: "{{ arr_portainer_stack_name }}_nzbget_config"
- name: "Arr | Update Portainer." - name: "Arr | Update Portainer."
chatton.portainer.portainer_stack: chatton.portainer.portainer_stack:
@ -45,9 +47,27 @@
- "{{ radarr_exposed_port }}:7878" - "{{ radarr_exposed_port }}:7878"
# sonarr # sonarr
- "{{ sonarr_exposed_port }}:8989" - "{{ sonarr_exposed_port }}:8989"
# lidarr
- "{{ lidarr_exposed_port }}:8686"
# jackett # jackett
- "{{ jackett_exposed_port }}:9117" - "{{ jackett_exposed_port }}:9117"
- "8191:8191" - "8191:8191"
nzbget:
labels: "{{ backup_labels}}"
container_name: nzbget
image: ghcr.io/nzbgetcom/nzbget:latest
environment:
- PUID=1000
- PGID=1000
- TZ=Europe/London
- "NZBGET_USER={{ nzbget_username }}"
- "NZBGET_PASS={{ nzbget_password }}"
volumes:
- nzbget_config:/config
- "{{ directories.downloads_dir }}:/downloads"
ports:
- 6789:6789
restart: unless-stopped
qbittorrent: qbittorrent:
labels: "{{ backup_labels}}" labels: "{{ backup_labels}}"
@ -100,6 +120,23 @@
- "{{ directories.downloads_dir }}:/downloads" - "{{ directories.downloads_dir }}:/downloads"
restart: unless-stopped restart: unless-stopped
lidarr:
depends_on:
- protonwire
image: "{{ lidarr_image }}:{{ lidarr_tag }}"
labels: "{{ backup_labels}}"
container_name: "{{ lidarr_container_name }}"
network_mode: "service:protonwire"
environment:
- "PUID={{ lidarr_puid }}"
- "PGID={{ lidarr_pgid }}"
- TZ=Europe/London
volumes:
- lidarr_config:/config
- "{{ directories.music_dir }}:/music"
- "{{ directories.downloads_dir }}:/downloads"
restart: unless-stopped
jackett: jackett:
labels: "{{ backup_labels}}" labels: "{{ backup_labels}}"
depends_on: depends_on:
@ -133,5 +170,7 @@
qbittorrent_config: {} qbittorrent_config: {}
radarr_config: {} radarr_config: {}
sonarr_config: {} sonarr_config: {}
lidarr_config: {}
jackett_config: {} jackett_config: {}
gluetun: {} gluetun: {}
nzbget_config: {}

@ -84,6 +84,9 @@ sections:
- title: Radarr - title: Radarr
icon: hl-radarr icon: hl-radarr
url: http://10.4.5.200:7878 url: http://10.4.5.200:7878
- title: Lidarr
icon: hl-lidarr
url: http://10.4.5.200:8686
- title: Overseerr - title: Overseerr
icon: hl-overseerr icon: hl-overseerr
url: https://overseerr.cianhatton.ie url: https://overseerr.cianhatton.ie

@ -1,7 +1,8 @@
--- ---
overseerr_state: present overseerr_state: present
overseerr_image: sctx/overseerr overseerr_image: sctx/overseerr
overseerr_tag: 1.33.2 # https://github.com/sct/overseerr/releases
overseerr_tag: 1.34.0
overseerr_expose_port: 5055 overseerr_expose_port: 5055
overseerr_container_name: overseerr overseerr_container_name: overseerr
overseerr_portainer_stack_name: overseerr overseerr_portainer_stack_name: overseerr

@ -0,0 +1,55 @@
---
# photoprism configuration
photoprism_image: photoprism/photoprism
photoprism_tag: 230615
photoprism_container_name: photoprism
photoprism_restart_policy: unless-stopped
# ports
photoprism_http_port: 2342
# environment variables
photoprism_admin_password: "{{ vault_photoprism_admin_password | default('changeme') }}"
photoprism_auth_mode: "password"
photoprism_site_url: "http://{{ ansible_default_ipv4.address }}:{{ photoprism_http_port }}"
photoprism_originals_limit: 5000
photoprism_http_compression: "gzip"
photoprism_log_level: "info"
photoprism_readonly: "false"
photoprism_experimental: "false"
photoprism_disable_chown: "false"
photoprism_disable_webdav: "false"
photoprism_disable_settings: "false"
photoprism_disable_tensorflow: "false"
photoprism_disable_faces: "false"
photoprism_disable_classification: "false"
photoprism_disable_raw: "false"
photoprism_raw_presets: "false"
photoprism_jpeg_quality: 85
photoprism_detect_nsfw: "false"
photoprism_upload_nsfw: "true"
photoprism_site_caption: "AI-Powered Photos App"
photoprism_site_description: ""
photoprism_site_author: ""
# database configuration
photoprism_database_driver: "mysql"
photoprism_database_server: "10.4.5.201:3306"
photoprism_database_name: "photoprism"
photoprism_database_user: "photoprism"
photoprism_database_password: "{{ vault_photoprism_database_password | default('changeme') }}"
# directories
photoprism_base_dir: /mnt/mergerfs/photoprism
photoprism_originals_dir: "{{ photoprism_base_dir }}/originals"
photoprism_import_dir: "{{ photoprism_base_dir }}/import"
photoprism_storage_dir: "{{ photoprism_base_dir }}/storage"
# network configuration
photoprism_network: mariadb_net
# hardware acceleration
photoprism_enable_hw_acceleration: true
# portainer configuration
photoprism_stack_name: photoprism

@ -0,0 +1,71 @@
---
- name: "PhotoPrism | Restore any missing volumes from S3"
ansible.builtin.include_role:
name: chatton.docker_backup.docker_s3_volume_restore
vars:
docker_backup_s3_volume: "{{ item }}"
with_items:
- name: "{{ photoprism_stack_name }}_photoprism_storage"
- name: "PhotoPrism | Update Portainer."
chatton.portainer.portainer_stack:
username: '{{ portainer_user }}'
password: '{{ portainer.password }}'
base_url: '{{ portainer_base_url }}'
stack_name: '{{ photoprism_stack_name }}'
endpoint_id: '{{ portainer_endpoint }}'
state: present
definition:
version: '3.5'
services:
photoprism:
labels: "{{ backup_labels }}"
image: "{{ photoprism_image }}:{{ photoprism_tag }}"
container_name: "{{ photoprism_container_name }}"
restart: "{{ photoprism_restart_policy }}"
security_opt:
- seccomp:unconfined
- apparmor:unconfined
ports:
- "{{ photoprism_http_port }}:2342"
environment:
PHOTOPRISM_ADMIN_PASSWORD: "{{ photoprism_admin_password }}"
PHOTOPRISM_AUTH_MODE: "{{ photoprism_auth_mode }}"
PHOTOPRISM_SITE_URL: "{{ photoprism_site_url }}"
PHOTOPRISM_ORIGINALS_LIMIT: "{{ photoprism_originals_limit }}"
PHOTOPRISM_HTTP_COMPRESSION: "{{ photoprism_http_compression }}"
PHOTOPRISM_LOG_LEVEL: "{{ photoprism_log_level }}"
PHOTOPRISM_READONLY: "{{ photoprism_readonly }}"
PHOTOPRISM_EXPERIMENTAL: "{{ photoprism_experimental }}"
PHOTOPRISM_DISABLE_CHOWN: "{{ photoprism_disable_chown }}"
PHOTOPRISM_DISABLE_WEBDAV: "{{ photoprism_disable_webdav }}"
PHOTOPRISM_DISABLE_SETTINGS: "{{ photoprism_disable_settings }}"
PHOTOPRISM_DISABLE_TENSORFLOW: "{{ photoprism_disable_tensorflow }}"
PHOTOPRISM_DISABLE_FACES: "{{ photoprism_disable_faces }}"
PHOTOPRISM_DISABLE_CLASSIFICATION: "{{ photoprism_disable_classification }}"
PHOTOPRISM_DISABLE_RAW: "{{ photoprism_disable_raw }}"
PHOTOPRISM_RAW_PRESETS: "{{ photoprism_raw_presets }}"
PHOTOPRISM_JPEG_QUALITY: "{{ photoprism_jpeg_quality }}"
PHOTOPRISM_DETECT_NSFW: "{{ photoprism_detect_nsfw }}"
PHOTOPRISM_UPLOAD_NSFW: "{{ photoprism_upload_nsfw }}"
PHOTOPRISM_DATABASE_DRIVER: "{{ photoprism_database_driver }}"
PHOTOPRISM_DATABASE_SERVER: "{{ photoprism_database_server }}"
PHOTOPRISM_DATABASE_NAME: "{{ photoprism_database_name }}"
PHOTOPRISM_DATABASE_USER: "{{ photoprism_database_user }}"
PHOTOPRISM_DATABASE_PASSWORD: "{{ photoprism_database_password }}"
PHOTOPRISM_SITE_CAPTION: "{{ photoprism_site_caption }}"
PHOTOPRISM_SITE_DESCRIPTION: "{{ photoprism_site_description }}"
PHOTOPRISM_SITE_AUTHOR: "{{ photoprism_site_author }}"
devices:
- "/dev/dri:/dev/dri"
working_dir: "/photoprism"
volumes:
- "{{ photoprism_originals_dir }}:/photoprism/originals"
- "{{ photoprism_import_dir }}:/photoprism/import"
- photoprism_storage:/photoprism/storage
volumes:
photoprism_storage: {}
networks:
default:
name: "{{ photoprism_network }}"
external: true

@ -1,8 +1,9 @@
--- ---
plex_portainer_stack_name: plex plex_portainer_stack_name: plex
plex_state: present plex_state: present
# https://hub.docker.com/r/linuxserver/plex
plex_image: lscr.io/linuxserver/plex plex_image: lscr.io/linuxserver/plex
plex_tag: 1.32.4 plex_tag: 1.42.1
plex_container_name: plex plex_container_name: plex
plex_expose_port: 32400 plex_expose_port: 32400

@ -38,12 +38,14 @@
volumes: volumes:
- config:/config - config:/config
- "{{ directories.tv_dir }}:/tv" - "{{ directories.tv_dir }}:/tv"
- "{{ directories.music_dir }}:/music"
- "{{ directories.exercise_dir }}:/exercise"
- "{{ directories.movies_dir }}:/movies" - "{{ directories.movies_dir }}:/movies"
- "{{ directories.transcoding_dir }}:/transcoding" - "{{ directories.transcoding_dir }}:/transcoding"
restart: "{{ restart_policy }}" restart: "{{ restart_policy }}"
devices: devices:
- /dev/dri:/dev/dri - /dev/dri:/dev/dri
tautulli: tautulli:
labels: "{{ backup_labels }}" labels: "{{ backup_labels }}"
image: lscr.io/linuxserver/tautulli:latest image: lscr.io/linuxserver/tautulli:latest

@ -18,6 +18,9 @@
version: '3.3' version: '3.3'
services: services:
uptime-kuma: uptime-kuma:
extra_hosts:
- "qnap:10.4.5.200"
- "dell:10.4.5.201"
labels: "{{ backup_labels }}" labels: "{{ backup_labels }}"
image: "{{ uptime_kuma_image }}:{{ uptime_kuma_tag }}" image: "{{ uptime_kuma_image }}:{{ uptime_kuma_tag }}"
container_name: "{{ uptime_kuma_container_name }}" container_name: "{{ uptime_kuma_container_name }}"

@ -1,7 +1,8 @@
--- ---
wireguard_easy_state: present wireguard_easy_state: present
wireguard_easy_image: weejewel/wg-easy wireguard_easy_image: ghcr.io/wg-easy/wg-easy
wireguard_easy_tag: 1.28.1 wireguard_easy_tag: "13"
wireguard_easy_expose_port: 80 wireguard_easy_web_port: 51821
wireguard_easy_vpn_port: 51820
wireguard_easy_portainer_stack_name: wg-easy wireguard_easy_portainer_stack_name: wg-easy
wireguard_easy_container_name: wg-easy wireguard_easy_container_name: wg-easy

@ -1,12 +1,17 @@
--- ---
- name: "Wireguard Easy | Restore any missing volumes from S3" - name: "WireGuard Easy | Restore any missing volumes from S3"
ansible.builtin.include_role: ansible.builtin.include_role:
name: chatton.docker_backup.docker_s3_volume_restore name: chatton.docker_backup.docker_s3_volume_restore
vars: vars:
docker_backup_s3_volume: docker_backup_s3_volume:
name: "{{ wireguard_easy_portainer_stack_name }}_data" name: "{{ wireguard_easy_portainer_stack_name }}_wg_data"
- name: "Wireguard Easy | Update Portainer." - name: "WireGuard Easy | Set backup labels"
ansible.builtin.set_fact:
wg_easy_labels:
ie.cianhatton.backup.schedule: weekly
- name: "WireGuard Easy | Deploy to Portainer"
chatton.portainer.portainer_stack: chatton.portainer.portainer_stack:
username: '{{ portainer_user }}' username: '{{ portainer_user }}'
password: '{{ portainer.password }}' password: '{{ portainer.password }}'
@ -18,17 +23,21 @@
version: "3.8" version: "3.8"
services: services:
wg-easy: wg-easy:
labels: "{{ backup_labels | combine(wg_easy_labels) }}"
image: "{{ wireguard_easy_image }}:{{ wireguard_easy_tag }}"
container_name: "{{ wireguard_easy_container_name }}"
environment: environment:
WG_HOST: "remote.cianhatton.ie" WG_HOST: "remote.cianhatton.ie"
PASSWORD: "{{ wireguard_easy_password }}" PASSWORD: "{{ wireguard_easy_password }}"
WG_DEFAULT_ADDRESS: "10.8.0.x"
image: "{{ wireguard_easy_image }}" WG_DEFAULT_DNS: "1.1.1.1"
container_name: "{{ wireguard_easy_container_name }}" WG_ALLOWED_IPS: "10.4.5.0/24"
WG_PERSISTENT_KEEPALIVE: "25"
volumes: volumes:
- data:/etc/wireguard - wg_data:/etc/wireguard
ports: ports:
- "51820:51820/udp" - "{{ wireguard_easy_vpn_port }}:51820/udp"
- "51821:51821/tcp" - "{{ wireguard_easy_web_port }}:51821/tcp"
restart: unless-stopped restart: unless-stopped
cap_add: cap_add:
- NET_ADMIN - NET_ADMIN
@ -37,4 +46,4 @@
- net.ipv4.ip_forward=1 - net.ipv4.ip_forward=1
- net.ipv4.conf.all.src_valid_mark=1 - net.ipv4.conf.all.src_valid_mark=1
volumes: volumes:
data: {} wg_data: {}

@ -1,2 +1,2 @@
--- ---
portainer_version: 2.18.3 portainer_version: 2.20.3

@ -1,2 +1,2 @@
--- ---
portainer_agent_version: 2.18.3 portainer_agent_version: 2.20.3

@ -1,153 +1,172 @@
$ANSIBLE_VAULT;1.1;AES256 $ANSIBLE_VAULT;1.1;AES256
36626132303830376130346561616565383939333462353764393431623131663132366530336337 30663636656133633365396130653636323730393637653831653235336437643465643364643933
6437376166623030633537623664346332666434623837320a653232646662636463646530346363 3361316530636433636439633636313931396139326636340a393362346234383366373831663133
34656362633065653031376533633532643563363732356431336130336435356361333037353961 37323634623964333764336233613065323535636433373337623233356464643264333339633965
6637656534666335360a313330646365623562323935646366613432656564363437303634366538 3564333266306262620a383638643330346362666363303534306262313839353562653564643130
39633465316330323031383036316430636465316662653031656537303762383165383666343135 32646235653363623230383033366538353630393338366532623430353931666634396163666633
39633637643637323136666638313865613437376364636166333333316362346239326363306666 37666635396231303039653738353262323435356237656332613661333362613238333935643032
66326565393235373962636164636365626538313639323765613363323836306165306639653736 38343932613037303238626133633437363334346335356335616561306333613336663237626366
34396665643037636437393130333732323230663762396139366130396265323966663065656164 65643637656665376261376363623335633838386263396431316663613630633336343761346336
34626535316635623539663033626434303239626335633435346466353533366465393865313433 32326533666136373961633435326364383934333332333432353539613330383431623462323761
38376234623639633062383336626633323939336339346530613366306438653430373430383133 32653237323937313336323739313036373061386337366236363863373362326234353931343634
36343865363534383338316532633066336435366464316239396232373932356466373836623065 33663661633263373831373239303436646431346233376465393236333135303665633934643231
34343130666536366535663332393539653862643236383663306465333362373961336639653138 63356339666166643862633431306539613266303434366166643437376434363563306262343237
37333732373866306138646230363261356464633463373839343763383737393332623339363566 30316539633365323363316432633564313033313866326338356634386537323264643630613631
39363032333363633164643835386162643735313932663635613134646631363431613731653537 33653635373462643263393335663563656538633562376565313736646431343662633539646431
36343438616566663938346665303764326335393832363032343436353730323661653565373539 39653566396362306438346432343762636135323631363331376532393264303333636631353938
34666232613235636631393237653033353737383538323465383466396139653735363563336264 38393233363432656631366433303237313737323263633937636231306231316366653631366131
33353164643065336639333565333865353234636235616633383363333565386432333063373431 39616363366161393532633330663739363531316639613166353736356264323363303664646539
39313638643066333831366332383234386437633264313532333539623430393139373736643336 33353635376230343666356339333832313061653336343764343166373665313564663337303063
31346434663633333731333265303633346439643635363066323334636331633832343539613762 65613232636230306639643163373636333034636434326533303862653366303332366538613037
39313136323732303662303834386661373231383764333663376264353564316637373730633539 31653961663366343534633962336538613735356461633361653961633539323965353937336536
62336135363430353631363461666332326332326461656337666234376166383833633662353637 61626236346333616234633132663838393631653137346164346130346539376538623737346237
65396437323634313932643335323233663632643364653066646432313534653931663361383833 38376566306563316562663232346132383065333539653866366433306266363465303166306162
66643534376561613463653536383662653634313233393861646163333561343139303930366233 63663234666562373534336463303937373638653532326435636165613339303165646633613139
33343637303033623865666637313164373933626338366164643462393533316365613662326431 33366663363763316339376465636364666232666137343531623036336239373665613331623962
37353337356630356531346663333662333163333364393630383063643433663165326234303861 31373636643064386166353362626663613132623033303164333733306364643662366165346666
37366239653761303066373135373563343166363535346264633436376363306566393162376665 64366637393331383361313364333834376633393465373530396131653733316532366430643638
63303863336131353738313062383533633263343032633439636430323361396363653163333763 36623831663731326634333865333565303963656462386461643438333862653837656131316662
36316263393635353930653465383938313832333266626538396533313739356365386665333938 61383337376165343236353838653666326637623530376261643833373861326238656137363063
30613666613633636664343439313161306332323234663962643137316232393937346466343133 65373134376435366633333838373836613835333162376131633032663934646261373630326337
35323434363261356664386431336330303063353663396137636435316663623866313237373530 31636665313139343564343862376264616534633334633566303539636333316362346161343633
34636366643438386236656330303239393232366366656638356630303737393631346661636135 38653039633338643133373639346334663732353037393334386363303931663238646136353639
34353431656134613164663632393630336262333938333964306430613462623765306334666134 63623131396361643039636532363132346330393663366463663062333561646632363763313963
37623630306663626630653938666266633563356237636161343664353261383461663661356562 38656437383962633130623135626631373935653662663734343536376139306631386238323765
38323836336532643939383538346232376163633237343563616632306333623935366139663763 64353931333566303465383765656639656236333363653037633834363462346461613737643265
34366561626265663165623435643862623363343535373334333032653735303435333835316661 31646335396634353235336332366334313335316565393064373730626232373861656462376438
64643233323932636238346537343831623037313035313465353531386364306361613963396261 62613566616239613631333164333137323438393061653033666561376532373764626466656566
31336439323062366235623239636136373939396139346337633464353836326535646336343135 31396436346538373239303731653131376264616365396637386530376332376634633635623437
36386231633362353664393635343866326239633437323036666662313166343934626465323233 63313237366462326232333263653338633864316536336530326431643066646530396139636135
32343362303762653763376261383138343961333164653263316663303538393331356261346166 38333264393265353264636665623533353637643536336163633764376565326534666439666365
62396330633466373663326238653232383437323630326138396133356130643465616132343566 37343731313134366664643935663330643364356333303637316238353138393833653630366335
62386337323039653761613232363836343735393037643765376635663765366533333861366335 39383164363931633034303230323866313832346461363364383366643934396165383561383431
66656564303063666263383666343536633631623565373532333237343864613062656237376432 35306362373838393033616235393632636536663063373935623139666439393366306135366130
30373632636265303933353834636132336161656437393135633666393937333166653665613634 36386231343061613434366632663233313339326136313237316266636138663939383631373936
63613235383738373930643361383235313438646261303437616363393635636531346332356234 38613662633162386362613261363161663031333561373337653832376263653036663365333033
66363065306231666138363063376238626535656231373361333230636435376634316530373238 32353232343530383530656563363638363663636134633331666236383638383634623930616135
31613365383031336364356535616661666534663533366662353139656638306634346331623862 35623666666333363537626230613264376466393633336465646462376138663330663261333466
34323963323765336161323664363135626131356139666461623865363534623830653236613839 66346232633630613031353930633966386235313562326633363134643138623333363634366333
61646536616266396665343563643439313761646530343861316531646136303630383034633764 34646339346166623563306634633530316535666161316535356563323334343339646437653535
37353861353961396364633033333462303066623235363739383531333830376464303463323766 64356166343530333538333036656539633062663332313763316630613964393238626266653063
32373135393664616664393638616465383031633132333165353231386137373662643038343931 66633538633362343963643464343738666663646666303664643732316136363134646534353936
34393233303765383139303930373737616231613931353234316237386330376461326566366639 37356364336366656433336164343039626531343234613831396665393463366264663730323330
65396432386265393764313135306136656234323639646335373836366535656535663637666162 62393262373830396437623932323339633361333635333161383730383731623361316337356362
34653863623563326130396139363039613033346436393034353034623435353936666161313039 66373537383965363831653134663430303030383766356461313638656561396262306131333438
34383339336533646132323263613830353737363038663135323136616535663263633038376439 35376663393065666265363131386437366134663232396431653237396132663764353033623539
64323362366465303264383362396631373932313966626635323961366432343239636563663962 64376466353637623439383466376232306263666136656565643635663761303566656336343666
31303731356631376534333039393463656265303830613739356139623366393264376232656233 31653232376637373864626534643535613633363634666266383634343763353634343866313263
31643139396338386234623733663761623366386464306264613164326531373934343063383232 66633630303366306233326130666531343037653039323237346164303438653466336462343262
30383533396136613134336366316330323834653261613136623066623562663562303961376234 35663034373264333166653538393735313063623266653831656261373337366231616564366536
31623265333434306462333033316161346130316664663139386136653435323061306534643866 62306661383864633664393137393730323432393066353039313366666266343138383234343131
31636137303664376361313765323932333737376665663038313435333664353861373136366538 36396163376265663031626431396239653738366436646665666537373939653663346330313538
32663361666262343435646237353566396665646335303634313365366232646464326363656536 62326138326134343439303133373561353134643565356134336638613065393864613338643161
31396361393830643737366361623364383233653632313635363361643232306666326363383066 63316532323134623865666333626562346231366164353035343961353266393633353131333966
63636437653335636262303133316365366130616330363837613061663038656536306464313039 63653066313362346139326332376231343035366362633465343265366666356634373237643034
31663035616232336634613062653230336262363564353562656537656233663964643661316533 35333835346238386363343964373861323633366666613530613130393337323165653137616338
37636266623462376261616135636339386234333936343765313433343132316231626462326535 63373339356261663365343564363430313162393232653636366633353463313134383965656339
33393963333965393632356333633666383934373663626633623137323533626136373230623664 64613035383533353535333738363533623431636437333837643834336538326363663031323337
65653363333066313734313637316439663963663864313930396563643261386238383363336236 32336433333464343862613761623763346165396633663734333037303632313433643466323561
33396139303331663134366537383139356565356665333031666639393236613263316364663261 33313763356165613262643637323862366638396138303537313665393239333134306466396461
61306530313966343736326564333437383930363161353634653432353835393861323531353334 61313339353262356135303161323833636135343036653465366338363864373665613937353362
66626236326538323363343135373364623236366133386633623733393138656339636237376335 37326131353139623732656134616230353863666336656431396535393162323630666238653833
64343836373262343237653836373934366265303863323930356630343533383437313066303537 62643435613135613831633437386537633634303738613063346631316562373734323233633466
36323735343762653233333232393937616233386164323637633265656638623961313666343637 30326630383265316132386661323866623432393963316464366462313139333432666330373564
32353366643334386466393631303063303331386538313230336336613431366564643138306339 62323565323133396465646635343166646364633964653136613163663434393661653730633635
64323439326539343662306537633964343063303335396437343462383465666532636639353262 65613230313438393363623164636635343733353131363362373934353834616265643966333465
38306232656366386638346131303362386239306266633935643461376461623237363034323030 61323964313632623433336536346538316236646530343230376132333666623334313336353533
63333032393763653132656565363739316432653937393931326665376338343436363266313766 39643237643662346536663435376339303834363162396436653662376566396537313031323230
65306137623436363532356366663561646137363066313461343666316361636461373063623337 63656434623136303733326339313237613861303965303130663735373532626134336232343762
66633232383463313330353662313166393265323363656332646539663132376465613439363837 64353231643631333036363330313063353737626231306339306161643830343333313663373033
35303732333039383137356362366561656661613230646436353963613861333930646664356230 39313931633530346232333364393536653338343630386461356365626336653035363262653039
32653539363031306138303733663064643330646230363564306230303431653564393131363131 65623538343831666539623736653763633965373230643835343935653662363732323131346664
38336461356462653638333735386564363933643630316636393930313666366164616635326138 64333830623764626563623533353661653936643431623632636666316335306465663564643066
39363665623262316536633537393831323534313761613863646363346161333635663062393861 32323235386238396537373166643038636663363136643837653234373138663166366566346161
37306339303563666632356564396536346361663062356631383839313031376532346338623764 64363635306434663163386666396234663332623230363533313963313735633165393539373135
34393030363263643738313931343838653866666130343337383633623036373937636266383534 65393130393233623030316536633763313239313738663961333530313938646438333338663133
36633730623562636130313861393131633234666134303736326363636363393035313838343030 63643934613831306363356163313062646338306430323932376665383464653338356665393837
62353162396162623737653530366462366136616139336633633738343862623336613364313830 64333463366561623039383236623662303837373661663565616663383161656335383731353835
62623538383461656136366166636531623861663431663732663563666261616531653266363761 30386665306231383566613763353565313631333637326533646166396530656235396665666630
36626531353034383437646439653135306563356432373133643439343535643066383737623335 34663265616332653932323836366662623535633134616230383633313637343838663530663837
31613062353833653163316236346630663764326432303764666639393135393439643463316532 63376339613936353634353830646364396664343336323266396634623662613239373939313339
37333033396433643631313838346338313332393939656237356335316238316637316437663139 63666562646534633732653139646162366239623637393162343031656238373664666237393461
38636665346466323639646538616563323735333933666230393933393133316635613465363534 62303064623435383834646331396332633638326131366432663335323364666139336461636266
63303833396364303438656562323730656462363932643237383764623066363965316165343235 37356331313338333231323263653635336639663333356135306639666335346131336337623334
38616361353635393139646436633535303965666634656139353539396239353334313834373133 63666534613238643335663165373265346563333665323735306238373734313935356635653235
39653132613639326136656234326363623964383266656362623866623864626435656465376333 36636666323038373634373536663136376564303661656565346537346636626337353166626334
39373136353731326262326161366334616463343533323134313339663733663432613863303432 36623732373462366363623737343236326135323339366565376531313339316366313765323139
35386664333435393665343739663839646132323734666235373664633939353135633339376231 31366330313039613966353837653531306134363365666231323334663231313338323632643930
36666631393531373566343538616635653564323334356362653335383164613361333962336132 30626164323639616164346438343264613734313663643963616530656137373864353038366664
36396435663334633933383935393530626632353938393332303538343832636238643865663864 34383032373430333464653761323563653638303765393064376361653838313034633131343030
32383932373539323636376663323131383066383165666339393234623837663234313630616333 33363834376134616564613063646235633064653537663062633437363832343038306263383665
33373231323464636464643032653138326662343634383161336666623234373438353831303531 64343639336538326637396531326266623531623738613535633832393039613434313331663365
66393036633331326433663137653438616537616133336164303434633431323335356132326461 30663830663638376639363733363465343762383366363530333637376265616163353961663664
39346430373738363838626162363337353262333839363833633437656538633936646139303535 38313131306533356166656336656435336338313534633635316164636666666564623563666131
65653030303839343134376232326332313037666239323539396661373365333138356136643263 38343833313037613531343439393634323637666335636466313866646537626236333066643035
33343036616636326663366162346363636439373330386434363130343633633061653134333435 32353166616464306634353832326365653564343632653464636433343562636166623939623732
32633338376465356430353661303939323138383262393531626334653233366563636363663538 63656364323065643964653965663531666636626138316638643339383365653565626533613834
37326666303434363863366439663435386632643661616134353533363639386235313734366237 32336632633833336234373538356365333932613133393430653833656234366232323862613035
64333966356539636263303062616539336466313238653239623438303730633536323736353239 31393764623963613139636430656139326261343735663532333334613164376463653631333961
66356239663166376366313230353365323534633461316564653133313837393363616233636432 33653663623339366135633335633261623734613137316137383438356239383661623933643632
36656236613365383139346665653636623664366162653961386336323938333833323530303465 64633635303932383336316138326233646664373862666337626266326339323462363632303166
39356331623136643735663363376662626339343139373337366339316662323732323163313532 64316362343130323839363237336638663137363561363062633433663166306566663861323635
33626231653036623636613966346165343463646562643835303430303761383531386364346661 32346132613339643035383236636230633031613235326530633638383239333266306135633631
38626361326262646266356431316231303335306335383362613537626239353164343665373832 31323638323832633430646235303733373033336365353538633637303861323635616331336239
36336336306266303266396235303031643239336264346662646564373366666233393966313563 35366238626666383465616437613135353439393565306238393333373436323262393463363461
63633330363737323936646465613033656163346361653435373634326464386633366131343961 30323866366136376232336133646531303265373962643636363135373037633032613162376534
35356237366135393762373166633463393865636137663264666430363665623732636662653066 66626338626430656163643061653434323061353939313966386261313535343039613631313732
39343566653237643330633736346133336431333935363536396430313064336437343939646135 62376532653364313466383866383939326434303562383565373965643866383633323939643765
31316432333335383662643134316234656161386563393630383639656466393235363538336264 62343639646463373533303630396234353732326662303262306265643266343265633837633764
63666430333735316334393766643064656132626462316233656566366563386234636135613235 65336464396563326261316335333034316666643566303936363463303563336436336166343230
66363237636332306461613531623266376263636464396562353937356165353562613862366138 32356263636631323237353861366163363037623664626164396637633761356531626436393530
34353838396236396264363364613230613730353263356335326365623630376461336639356365 34333137613462363235326362663436353636653435656161653662343536616432326333373266
65313038653534363161636333303137353939626463383934333766663266306133353434313663 30343466666537663337376632623936653466663334616163343662613035353861633631336162
61313936616664316661316438373831383536326632303534373936316136346661363231363931 39353933326234623230303933353732313963383933303165653239616664363436396437653164
38396636323336633238633932363337393365323132346332356130333137613961336335343361 39646461343330343866333563376233613438323332393939303361363565316338303836313066
63383631653533333139326534336661386264323431336563626233393230303238373737393464 38323933393439643231393338343835353033663630646331303134396336353136303433333962
37326336353337336462613733316335643063623934356336343863366663316264376637653237 66663034333539386666303230316362613135396361623663393839383036313630356137396136
64376162326539333338373966373364663231306430616530383566323735303937663830366534 39333134356239663939613966643232333530613864393666373061363964316530626635653965
30393637356535323466373930316465653139386261393362363937383230373165306633313031 37326236316363613966333763653331376666323334363135363732396261363232623535636433
64353835393236633764386330666130623966623163623262356439376166643233613766343863 35653134303332306637623139323833383432363835643661363131336335323330626662326536
30373937396231323734653939323131353732616331666163326636316262636234303831616436 33326631343137663634363939333537653865313232333362326632303466646538323164306437
31396663633230623835633035633638613966346434306333323936303734653832363832653933 39653537323361383738646230323832306565323937666436636335303534626463333135383161
61336633353731636263653363366562313639333736323233626563666361303365363831636361 32363164366436663038663862313961646536326530663830613737646538626534653736646139
64316131336638663637303638366565633530643632313662326232323763323136316331666166 39663864373132336234346563663935383863333261366466386638363934323065393830623434
61663533306666666361323066613731653666313438616236613264346536313630636665363637 31383866363436313164353233306365376165363432656332323337336634663261643766373366
66383939643363346137366365623365303535646631346462636531616339393431626263383066 35316165373139353462383637353336373436326361323030656531323733353464653264313632
34336538373861356235356237333666356336363438343537306466303131353965393930383764 35333836313366303831656434373539623166663762353539376539343664306437346163633133
38656336313730653565303863326164333366333562323137646330393638616433643233626138 36646637636365656266373261393339356535653233376634636238633862666330323463363165
39636663313935353633626539663462343533643537393439373839633165303262633232653835 34643461323139343965616238353831646263623263393234386234373262353437636161303934
63666238646364366261393231306639656138623132376239363037656637303637376237333066 61326263363363333662343233623138336334323731303633663936326361656163353539326363
35666333636664366266626330366237343732396234373233353564316566333831633732306266 38616264356636393533646638376333323437366135653431633233363938353732376439626261
31313437363764333331626332383638333836393136373461636336326133346463333636323538 62666632633334623464333532306261326337613065353332653332663136306530353834373731
34373536303731636565613662343364336662666561396138623163366163636437316165613566 36653134396666336339393538346139643239343030626230363633333463383466303534386534
65656431363631626465343965636632393165613139306533613132336261643439616565316138 38663964656238393331613133633765653932336336333766646264326466663565393061303662
31393662643666343962636261306166623166353264613963636136306338316332346531653938 63353830383765366534336466396639643463616534353336316362626231343731313765653935
65643864346634656161623866343437323563353965653566656435613762333964393030623639 63616132383963346131663931643033633562353766323836343938306664336362383736616362
62626530663539316663373330303863613039656263323936383838623738326638313937376364 63366261616232346232353339303861646633663231363834386538343464323638663334303932
33313833353165323332373865626365663837383037653361323061336532343439333630316666 66653735613231316239633039323537316166323262306339643866353637346538393866386261
61396266626464663666653163336537393262393539393535346532396138313234653836396633 64663162386138333961633430333837306663393263336662363664646164396365626139383364
37376437346433333565616134303138653039313933666636373833616162343033613737636563 61336336386466346131373466303761613833383932353836346261653862383732333365386366
32383830306134363730663137346430346565633735373966663061316133326263643031366137 38653964663166333265313532653062306434306466633134623162356334333436333362383330
33376337303462613836353433613262616135343636363631613366633264636139663062396561 64313839653639306334646264316338363132303836623966666331313964626264303135333763
63333330366430323632333834336461303939643064656664326564613739656532336537653231 61333766326539383233666436393365333165366632636461636566666239336536366263623937
61653732623135653333 61396263306364353136313233386139333966383339613833623139363235383263333336376236
61633331356562376632353630316366336363366466303637353236666433643731643230663966
63393462623736653265356666366261326563343339613065323738353736326161646236323833
37626164646638666638323661306330633832323238623933363433373438616431316662343238
34386535653731623631313861316366356432383035376436336262336436643663623161353233
31333464653031323463656337353830366239303432613962616361636262393663323938613363
37613136646237613830323436616438363634623632666666356466373230336139373462616531
31346231656238383263613935616565383334373531363733396166396631306237626532343032
30306563663939613636373632323832306338613930393931333465383339326365363132353136
38336263303836396637633961653535643038353033663361663835373264366233326139333932
61623437633331613130653737646565643834646363663632396239306134663534643532616263
33356162366165616334613766383134393734386665316538313664623933323033383266613531
66343337633166346361653663376163643263343936616266393664303534626461396566373662
36333231323234333663393463333339666263396335636534306533613734386266303337373338
39333866356666356233616233656636346135303137663739613335386438383934333063343762
30323762383334323238333331303362333434373164643766343031376666373331333739306664
66353534356131613832623838633861393164373161333064613361343664313638333630646561
31313166313536363064336264366437626436336266393333663561343430333362363034653631
61336137366262323239626465326166376332336436636462633934386666666639653062313833
343231666630326665663731633436383230

Loading…
Cancel
Save