From 73ef215a8848b8b285f903804dbae7c1654e28bd Mon Sep 17 00:00:00 2001 From: eshanized Date: Tue, 31 Dec 2024 12:53:31 +0530 Subject: [PATCH] =?UTF-8?q?=F0=9F=A7=B9=20chore:=20it=20is=20an=20untouche?= =?UTF-8?q?d=20file?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- archiso/airootfs/etc/hostname | 1 + archiso/airootfs/etc/locale.conf | 1 + archiso/airootfs/etc/localtime | 1 + .../etc/mkinitcpio.conf.d/archiso.conf | 3 + .../airootfs/etc/mkinitcpio.d/linux.preset | 8 + .../airootfs/etc/modprobe.d/broadcom-wl.conf | 7 + archiso/airootfs/etc/motd | 11 + .../etc/pacman.d/hooks/uncomment-mirrors.hook | 13 + ...z99-remove-custom-hooks-from-airootfs.hook | 18 ++ archiso/airootfs/etc/passwd | 1 + archiso/airootfs/etc/resolv.conf | 1 + archiso/airootfs/etc/shadow | 1 + .../etc/ssh/sshd_config.d/10-archiso.conf | 3 + .../journald.conf.d/volatile-storage.conf | 2 + .../systemd/logind.conf.d/do-not-suspend.conf | 4 + .../ipv6-privacy-extensions.conf | 2 + .../etc/systemd/network/20-ethernet.network | 24 ++ .../etc/systemd/network/20-wlan.network | 20 ++ .../etc/systemd/network/20-wwan.network | 19 ++ .../etc/systemd/resolved.conf.d/archiso.conf | 4 + .../systemd-gpt-auto-generator | 1 + .../etc/systemd/system/choose-mirror.service | 10 + .../cloud-config.service | 1 + .../cloud-final.service | 1 + .../cloud-init-local.service | 1 + .../cloud-init-main.service | 1 + .../cloud-init-network.service | 1 + ...dbus-org.freedesktop.ModemManager1.service | 1 + .../dbus-org.freedesktop.network1.service | 1 + .../dbus-org.freedesktop.resolve1.service | 1 + .../dbus-org.freedesktop.timesync1.service | 1 + .../systemd/system/etc-pacman.d-gnupg.mount | 8 + .../getty@tty1.service.d/autologin.conf | 3 + .../system/livecd-alsa-unmuter.service | 13 + .../etc/systemd/system/livecd-talk.service | 20 ++ .../ModemManager.service | 1 + .../choose-mirror.service | 1 + .../hv_fcopy_daemon.service | 1 + .../hv_kvp_daemon.service | 1 + .../hv_vss_daemon.service | 1 + .../multi-user.target.wants/iwd.service | 1 + .../livecd-talk.service | 1 + .../pacman-init.service | 1 + .../multi-user.target.wants/reflector.service | 1 + .../multi-user.target.wants/sshd.service | 1 + .../systemd-networkd.service | 1 + .../systemd-resolved.service | 1 + .../vboxservice.service | 1 + .../multi-user.target.wants/vmtoolsd.service | 1 + .../vmware-vmblock-fuse.service | 1 + .../systemd-networkd-wait-online.service | 1 + .../etc/systemd/system/pacman-init.service | 15 ++ .../system/reflector.service.d/archiso.conf | 6 + .../system/sockets.target.wants/pcscd.socket | 1 + .../systemd-networkd.socket | 1 + .../livecd-alsa-unmuter.service | 1 + .../systemd-time-wait-sync.service | 1 + .../systemd-timesyncd.service | 1 + .../wait-for-only-one-interface.conf | 6 + .../airootfs/etc/xdg/reflector/reflector.conf | 8 + archiso/airootfs/root/.automated_script.sh | 44 ++++ archiso/airootfs/root/.gnupg/scdaemon.conf | 4 + archiso/airootfs/root/.zlogin | 6 + .../airootfs/usr/local/bin/Installation_guide | 5 + archiso/airootfs/usr/local/bin/choose-mirror | 29 +++ archiso/airootfs/usr/local/bin/livecd-sound | 239 ++++++++++++++++++ .../local/share/livecd-sound/asound.conf.in | 3 + archiso/bootstrap_packages.x86_64 | 2 + .../entries/01-archiso-x86_64-linux.conf | 5 + .../02-archiso-x86_64-speech-linux.conf | 5 + .../entries/03-archiso-x86_64-memtest86+.conf | 3 + archiso/efiboot/loader/loader.conf | 3 + archiso/grub/grub.cfg | 107 ++++++++ archiso/grub/loopback.cfg | 80 ++++++ archiso/packages.x86_64 | 128 ++++++++++ archiso/pacman.conf | 100 ++++++++ archiso/profiledef.sh | 27 ++ archiso/syslinux/archiso_head.cfg | 28 ++ archiso/syslinux/archiso_pxe-linux.cfg | 32 +++ archiso/syslinux/archiso_pxe.cfg | 5 + archiso/syslinux/archiso_sys-linux.cfg | 20 ++ archiso/syslinux/archiso_sys.cfg | 8 + archiso/syslinux/archiso_tail.cfg | 35 +++ archiso/syslinux/splash.png | Bin 0 -> 45400 bytes archiso/syslinux/syslinux.cfg | 11 + 85 files changed, 1193 insertions(+) create mode 100644 archiso/airootfs/etc/hostname create mode 100644 archiso/airootfs/etc/locale.conf create mode 120000 archiso/airootfs/etc/localtime create mode 100644 archiso/airootfs/etc/mkinitcpio.conf.d/archiso.conf create mode 100644 archiso/airootfs/etc/mkinitcpio.d/linux.preset create mode 100644 archiso/airootfs/etc/modprobe.d/broadcom-wl.conf create mode 100644 archiso/airootfs/etc/motd create mode 100644 archiso/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook create mode 100644 archiso/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook create mode 100644 archiso/airootfs/etc/passwd create mode 120000 archiso/airootfs/etc/resolv.conf create mode 100644 archiso/airootfs/etc/shadow create mode 100644 archiso/airootfs/etc/ssh/sshd_config.d/10-archiso.conf create mode 100644 archiso/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf create mode 100644 archiso/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf create mode 100644 archiso/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf create mode 100644 archiso/airootfs/etc/systemd/network/20-ethernet.network create mode 100644 archiso/airootfs/etc/systemd/network/20-wlan.network create mode 100644 archiso/airootfs/etc/systemd/network/20-wwan.network create mode 100644 archiso/airootfs/etc/systemd/resolved.conf.d/archiso.conf create mode 120000 archiso/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator create mode 100644 archiso/airootfs/etc/systemd/system/choose-mirror.service create mode 120000 archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service create mode 120000 archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service create mode 120000 archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service create mode 120000 archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service create mode 120000 archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service create mode 120000 archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service create mode 120000 archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service create mode 120000 archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service create mode 120000 archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service create mode 100644 archiso/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount create mode 100644 archiso/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf create mode 100644 archiso/airootfs/etc/systemd/system/livecd-alsa-unmuter.service create mode 100644 archiso/airootfs/etc/systemd/system/livecd-talk.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service create mode 120000 archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service create mode 120000 archiso/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service create mode 100644 archiso/airootfs/etc/systemd/system/pacman-init.service create mode 100644 archiso/airootfs/etc/systemd/system/reflector.service.d/archiso.conf create mode 120000 archiso/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket create mode 120000 archiso/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket create mode 120000 archiso/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service create mode 120000 archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service create mode 120000 archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service create mode 100644 archiso/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf create mode 100644 archiso/airootfs/etc/xdg/reflector/reflector.conf create mode 100755 archiso/airootfs/root/.automated_script.sh create mode 100644 archiso/airootfs/root/.gnupg/scdaemon.conf create mode 100644 archiso/airootfs/root/.zlogin create mode 100755 archiso/airootfs/usr/local/bin/Installation_guide create mode 100755 archiso/airootfs/usr/local/bin/choose-mirror create mode 100755 archiso/airootfs/usr/local/bin/livecd-sound create mode 100644 archiso/airootfs/usr/local/share/livecd-sound/asound.conf.in create mode 100644 archiso/bootstrap_packages.x86_64 create mode 100644 archiso/efiboot/loader/entries/01-archiso-x86_64-linux.conf create mode 100644 archiso/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf create mode 100644 archiso/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf create mode 100644 archiso/efiboot/loader/loader.conf create mode 100644 archiso/grub/grub.cfg create mode 100644 archiso/grub/loopback.cfg create mode 100644 archiso/packages.x86_64 create mode 100644 archiso/pacman.conf create mode 100644 archiso/profiledef.sh create mode 100644 archiso/syslinux/archiso_head.cfg create mode 100644 archiso/syslinux/archiso_pxe-linux.cfg create mode 100644 archiso/syslinux/archiso_pxe.cfg create mode 100644 archiso/syslinux/archiso_sys-linux.cfg create mode 100644 archiso/syslinux/archiso_sys.cfg create mode 100644 archiso/syslinux/archiso_tail.cfg create mode 100644 archiso/syslinux/splash.png create mode 100644 archiso/syslinux/syslinux.cfg diff --git a/archiso/airootfs/etc/hostname b/archiso/airootfs/etc/hostname new file mode 100644 index 0000000..2dbe21e --- /dev/null +++ b/archiso/airootfs/etc/hostname @@ -0,0 +1 @@ +archiso diff --git a/archiso/airootfs/etc/locale.conf b/archiso/airootfs/etc/locale.conf new file mode 100644 index 0000000..f9c983c --- /dev/null +++ b/archiso/airootfs/etc/locale.conf @@ -0,0 +1 @@ +LANG=C.UTF-8 diff --git a/archiso/airootfs/etc/localtime b/archiso/airootfs/etc/localtime new file mode 120000 index 0000000..0e35b57 --- /dev/null +++ b/archiso/airootfs/etc/localtime @@ -0,0 +1 @@ +/usr/share/zoneinfo/UTC \ No newline at end of file diff --git a/archiso/airootfs/etc/mkinitcpio.conf.d/archiso.conf b/archiso/airootfs/etc/mkinitcpio.conf.d/archiso.conf new file mode 100644 index 0000000..5c008e5 --- /dev/null +++ b/archiso/airootfs/etc/mkinitcpio.conf.d/archiso.conf @@ -0,0 +1,3 @@ +HOOKS=(base udev microcode modconf kms memdisk archiso archiso_loop_mnt archiso_pxe_common archiso_pxe_nbd archiso_pxe_http archiso_pxe_nfs block filesystems keyboard) +COMPRESSION="xz" +COMPRESSION_OPTIONS=(-9e) diff --git a/archiso/airootfs/etc/mkinitcpio.d/linux.preset b/archiso/airootfs/etc/mkinitcpio.d/linux.preset new file mode 100644 index 0000000..8e85205 --- /dev/null +++ b/archiso/airootfs/etc/mkinitcpio.d/linux.preset @@ -0,0 +1,8 @@ +# mkinitcpio preset file for the 'linux' package on archiso + +PRESETS=('archiso') + +ALL_kver='/boot/vmlinuz-linux' +archiso_config='/etc/mkinitcpio.conf.d/archiso.conf' + +archiso_image="/boot/initramfs-linux.img" diff --git a/archiso/airootfs/etc/modprobe.d/broadcom-wl.conf b/archiso/airootfs/etc/modprobe.d/broadcom-wl.conf new file mode 100644 index 0000000..0eae70c --- /dev/null +++ b/archiso/airootfs/etc/modprobe.d/broadcom-wl.conf @@ -0,0 +1,7 @@ +# The broadcom-wl package requires some modules to be disabled in order to use +# wl. Since the ISO image needs to cover many hardware cases, this file +# overrides the default blacklist in /usr/lib/modprobe.d/ +# +# If you need to use wl, you may need to delete this file, then `rmmod` any +# already-loaded modules that are now blacklisted before proceeding to modprobe +# wl itself. diff --git a/archiso/airootfs/etc/motd b/archiso/airootfs/etc/motd new file mode 100644 index 0000000..4d9eda1 --- /dev/null +++ b/archiso/airootfs/etc/motd @@ -0,0 +1,11 @@ +To install Arch Linux follow the installation guide: +https://wiki.archlinux.org/title/Installation_guide + +For Wi-Fi, authenticate to the wireless network using the iwctl utility. +For mobile broadband (WWAN) modems, connect with the mmcli utility. +Ethernet, WLAN and WWAN interfaces using DHCP should work automatically. + +After connecting to the internet, the installation guide can be accessed +via the convenience script Installation_guide. + +                                           diff --git a/archiso/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook b/archiso/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook new file mode 100644 index 0000000..342aa95 --- /dev/null +++ b/archiso/airootfs/etc/pacman.d/hooks/uncomment-mirrors.hook @@ -0,0 +1,13 @@ +# remove from airootfs! +[Trigger] +Operation = Install +Operation = Upgrade +Type = Package +Target = pacman-mirrorlist + +[Action] +Description = Uncommenting all mirrors in /etc/pacman.d/mirrorlist... +When = PostTransaction +Depends = pacman-mirrorlist +Depends = sed +Exec = /usr/bin/sed -i "s/#Server/Server/g" /etc/pacman.d/mirrorlist diff --git a/archiso/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook b/archiso/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook new file mode 100644 index 0000000..8dfb943 --- /dev/null +++ b/archiso/airootfs/etc/pacman.d/hooks/zzzz99-remove-custom-hooks-from-airootfs.hook @@ -0,0 +1,18 @@ +# remove from airootfs! +# As a workaround for https://bugs.archlinux.org/task/49347 , remove pacman hooks specific to the ISO build process. +# If not, they would be used when pacstrap is run in the live environment. + +[Trigger] +Operation = Install +Operation = Upgrade +Operation = Remove +Type = Package +Target = * + +[Action] +Description = Work around FS#49347 by removing custom pacman hooks that are only required during ISO build... +When = PostTransaction +Depends = sh +Depends = coreutils +Depends = grep +Exec = /bin/sh -c "rm -- $(grep -Frl 'remove from airootfs' /etc/pacman.d/hooks/)" diff --git a/archiso/airootfs/etc/passwd b/archiso/airootfs/etc/passwd new file mode 100644 index 0000000..2807d5d --- /dev/null +++ b/archiso/airootfs/etc/passwd @@ -0,0 +1 @@ +root:x:0:0:root:/root:/usr/bin/zsh diff --git a/archiso/airootfs/etc/resolv.conf b/archiso/airootfs/etc/resolv.conf new file mode 120000 index 0000000..3639662 --- /dev/null +++ b/archiso/airootfs/etc/resolv.conf @@ -0,0 +1 @@ +/run/systemd/resolve/stub-resolv.conf \ No newline at end of file diff --git a/archiso/airootfs/etc/shadow b/archiso/airootfs/etc/shadow new file mode 100644 index 0000000..7edfd69 --- /dev/null +++ b/archiso/airootfs/etc/shadow @@ -0,0 +1 @@ +root::14871:::::: diff --git a/archiso/airootfs/etc/ssh/sshd_config.d/10-archiso.conf b/archiso/airootfs/etc/ssh/sshd_config.d/10-archiso.conf new file mode 100644 index 0000000..6ea7b41 --- /dev/null +++ b/archiso/airootfs/etc/ssh/sshd_config.d/10-archiso.conf @@ -0,0 +1,3 @@ +# Allow root login using password authentication +PasswordAuthentication yes +PermitRootLogin yes diff --git a/archiso/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf b/archiso/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf new file mode 100644 index 0000000..b69850d --- /dev/null +++ b/archiso/airootfs/etc/systemd/journald.conf.d/volatile-storage.conf @@ -0,0 +1,2 @@ +[Journal] +Storage=volatile diff --git a/archiso/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf b/archiso/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf new file mode 100644 index 0000000..f3ecb39 --- /dev/null +++ b/archiso/airootfs/etc/systemd/logind.conf.d/do-not-suspend.conf @@ -0,0 +1,4 @@ +[Login] +HandleSuspendKey=ignore +HandleHibernateKey=ignore +HandleLidSwitch=ignore diff --git a/archiso/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf b/archiso/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf new file mode 100644 index 0000000..0e9ceb4 --- /dev/null +++ b/archiso/airootfs/etc/systemd/network.conf.d/ipv6-privacy-extensions.conf @@ -0,0 +1,2 @@ +[Network] +IPv6PrivacyExtensions=yes diff --git a/archiso/airootfs/etc/systemd/network/20-ethernet.network b/archiso/airootfs/etc/systemd/network/20-ethernet.network new file mode 100644 index 0000000..d3a3271 --- /dev/null +++ b/archiso/airootfs/etc/systemd/network/20-ethernet.network @@ -0,0 +1,24 @@ +[Match] +# Matching with "Type=ether" causes issues with containers because it also matches virtual Ethernet interfaces (veth*). +# See https://bugs.archlinux.org/task/70892 +# Instead match by globbing the network interface name. +Name=en* +Name=eth* + +[Link] +RequiredForOnline=routable + +[Network] +DHCP=yes +MulticastDNS=yes + +# systemd-networkd does not set per-interface-type default route metrics +# https://github.com/systemd/systemd/issues/17698 +# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband. +# Use values from NetworkManager. From nm_device_get_route_metric_default in +# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c +[DHCPv4] +RouteMetric=100 + +[IPv6AcceptRA] +RouteMetric=100 diff --git a/archiso/airootfs/etc/systemd/network/20-wlan.network b/archiso/airootfs/etc/systemd/network/20-wlan.network new file mode 100644 index 0000000..8b70a95 --- /dev/null +++ b/archiso/airootfs/etc/systemd/network/20-wlan.network @@ -0,0 +1,20 @@ +[Match] +Name=wl* + +[Link] +RequiredForOnline=routable + +[Network] +DHCP=yes +MulticastDNS=yes + +# systemd-networkd does not set per-interface-type default route metrics +# https://github.com/systemd/systemd/issues/17698 +# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband. +# Use values from NetworkManager. From nm_device_get_route_metric_default in +# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c +[DHCPv4] +RouteMetric=600 + +[IPv6AcceptRA] +RouteMetric=600 diff --git a/archiso/airootfs/etc/systemd/network/20-wwan.network b/archiso/airootfs/etc/systemd/network/20-wwan.network new file mode 100644 index 0000000..6e1c8dd --- /dev/null +++ b/archiso/airootfs/etc/systemd/network/20-wwan.network @@ -0,0 +1,19 @@ +[Match] +Name=ww* + +[Link] +RequiredForOnline=routable + +[Network] +DHCP=yes + +# systemd-networkd does not set per-interface-type default route metrics +# https://github.com/systemd/systemd/issues/17698 +# Explicitly set route metric, so that Ethernet is preferred over Wi-Fi and Wi-Fi is preferred over mobile broadband. +# Use values from NetworkManager. From nm_device_get_route_metric_default in +# https://gitlab.freedesktop.org/NetworkManager/NetworkManager/-/blob/main/src/core/devices/nm-device.c +[DHCPv4] +RouteMetric=700 + +[IPv6AcceptRA] +RouteMetric=700 diff --git a/archiso/airootfs/etc/systemd/resolved.conf.d/archiso.conf b/archiso/airootfs/etc/systemd/resolved.conf.d/archiso.conf new file mode 100644 index 0000000..636f3bd --- /dev/null +++ b/archiso/airootfs/etc/systemd/resolved.conf.d/archiso.conf @@ -0,0 +1,4 @@ +# Default systemd-resolved configuration for archiso + +[Resolve] +MulticastDNS=yes diff --git a/archiso/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator b/archiso/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator new file mode 120000 index 0000000..dc1dc0c --- /dev/null +++ b/archiso/airootfs/etc/systemd/system-generators/systemd-gpt-auto-generator @@ -0,0 +1 @@ +/dev/null \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/choose-mirror.service b/archiso/airootfs/etc/systemd/system/choose-mirror.service new file mode 100644 index 0000000..b6a3562 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/choose-mirror.service @@ -0,0 +1,10 @@ +[Unit] +Description=Choose mirror from the kernel command line +ConditionKernelCommandLine=mirror + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/choose-mirror + +[Install] +WantedBy=multi-user.target diff --git a/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service new file mode 120000 index 0000000..ebc50f0 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-config.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-config.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service new file mode 120000 index 0000000..80fa3c8 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-final.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-final.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service new file mode 120000 index 0000000..dd8e9f1 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-local.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-local.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service new file mode 120000 index 0000000..875ff73 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-main.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-main.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service new file mode 120000 index 0000000..ae77734 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/cloud-init.target.wants/cloud-init-network.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/cloud-init-network.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service new file mode 120000 index 0000000..dcf7c8e --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.ModemManager1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/ModemManager.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service new file mode 120000 index 0000000..4c158e6 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.network1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service new file mode 120000 index 0000000..4f6ae34 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.resolve1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-resolved.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service new file mode 120000 index 0000000..cd00411 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/dbus-org.freedesktop.timesync1.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-timesyncd.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount b/archiso/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount new file mode 100644 index 0000000..038961e --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/etc-pacman.d-gnupg.mount @@ -0,0 +1,8 @@ +[Unit] +Description=Temporary /etc/pacman.d/gnupg directory + +[Mount] +What=tmpfs +Where=/etc/pacman.d/gnupg +Type=tmpfs +Options=mode=0755,noswap diff --git a/archiso/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf b/archiso/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf new file mode 100644 index 0000000..b9d22eb --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/getty@tty1.service.d/autologin.conf @@ -0,0 +1,3 @@ +[Service] +ExecStart= +ExecStart=-/sbin/agetty -o '-p -f -- \\u' --noclear --autologin root - $TERM diff --git a/archiso/airootfs/etc/systemd/system/livecd-alsa-unmuter.service b/archiso/airootfs/etc/systemd/system/livecd-alsa-unmuter.service new file mode 100644 index 0000000..03db4b9 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/livecd-alsa-unmuter.service @@ -0,0 +1,13 @@ +[Unit] +Description=Unmute All Sound Card Controls For Use With The Live Arch Environment +# This needs to run after the audio device becomes available. +Wants=systemd-udev-settle.service +After=systemd-udev-settle.service sound.target +ConditionKernelCommandLine=accessibility=on + +[Service] +Type=oneshot +ExecStart=/usr/local/bin/livecd-sound -u + +[Install] +WantedBy=sound.target diff --git a/archiso/airootfs/etc/systemd/system/livecd-talk.service b/archiso/airootfs/etc/systemd/system/livecd-talk.service new file mode 100644 index 0000000..b38df22 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/livecd-talk.service @@ -0,0 +1,20 @@ +[Unit] +Description=Screen reader service +After=livecd-alsa-unmuter.service +Before=getty@tty1.service +ConditionKernelCommandLine=accessibility=on + +[Service] +Type=oneshot +TTYPath=/dev/tty13 +ExecStartPre=/usr/bin/chvt 13 +ExecStart=/usr/local/bin/livecd-sound -p +ExecStartPost=/usr/bin/chvt 1 +ExecStartPost=systemctl start espeakup.service +StandardInput=tty +TTYVHangup=yes +TTYVTDisallocate=yes +RemainAfterExit=true + +[Install] +WantedBy=multi-user.target diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service new file mode 120000 index 0000000..dcf7c8e --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/ModemManager.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/ModemManager.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service new file mode 120000 index 0000000..2d8d256 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/choose-mirror.service @@ -0,0 +1 @@ +../choose-mirror.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service new file mode 120000 index 0000000..20ac7b2 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_fcopy_daemon.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/hv_fcopy_daemon.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service new file mode 120000 index 0000000..a7eac4a --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_kvp_daemon.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/hv_kvp_daemon.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service new file mode 120000 index 0000000..eae19ef --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/hv_vss_daemon.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/hv_vss_daemon.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service new file mode 120000 index 0000000..3625abd --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/iwd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/iwd.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service new file mode 120000 index 0000000..b917481 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/livecd-talk.service @@ -0,0 +1 @@ +/etc/systemd/system/livecd-talk.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service new file mode 120000 index 0000000..d09eec6 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/pacman-init.service @@ -0,0 +1 @@ +../pacman-init.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service new file mode 120000 index 0000000..d372729 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/reflector.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/reflector.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service new file mode 120000 index 0000000..d21ebd9 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/sshd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/sshd.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service new file mode 120000 index 0000000..4c158e6 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-networkd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service new file mode 120000 index 0000000..4f6ae34 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/systemd-resolved.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-resolved.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service new file mode 120000 index 0000000..cb2d560 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vboxservice.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/vboxservice.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service new file mode 120000 index 0000000..e0a11a7 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmtoolsd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/vmtoolsd.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service new file mode 120000 index 0000000..173f306 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/multi-user.target.wants/vmware-vmblock-fuse.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/vmware-vmblock-fuse.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service b/archiso/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service new file mode 120000 index 0000000..7d6ad92 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/network-online.target.wants/systemd-networkd-wait-online.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd-wait-online.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/pacman-init.service b/archiso/airootfs/etc/systemd/system/pacman-init.service new file mode 100644 index 0000000..b824884 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/pacman-init.service @@ -0,0 +1,15 @@ +[Unit] +Description=Initializes Pacman keyring +Requires=etc-pacman.d-gnupg.mount +After=etc-pacman.d-gnupg.mount time-sync.target +BindsTo=etc-pacman.d-gnupg.mount +Before=archlinux-keyring-wkd-sync.service + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/bin/pacman-key --init +ExecStart=/usr/bin/pacman-key --populate + +[Install] +WantedBy=multi-user.target diff --git a/archiso/airootfs/etc/systemd/system/reflector.service.d/archiso.conf b/archiso/airootfs/etc/systemd/system/reflector.service.d/archiso.conf new file mode 100644 index 0000000..de6664d --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/reflector.service.d/archiso.conf @@ -0,0 +1,6 @@ +[Unit] +ConditionKernelCommandLine=!mirror + +[Service] +Restart=on-failure +RestartSec=10 diff --git a/archiso/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket b/archiso/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket new file mode 120000 index 0000000..3897c63 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/sockets.target.wants/pcscd.socket @@ -0,0 +1 @@ +/usr/lib/systemd/system/pcscd.socket \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket b/archiso/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket new file mode 120000 index 0000000..51942c8 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/sockets.target.wants/systemd-networkd.socket @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-networkd.socket \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service b/archiso/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service new file mode 120000 index 0000000..98c0fc8 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/sound.target.wants/livecd-alsa-unmuter.service @@ -0,0 +1 @@ +../livecd-alsa-unmuter.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service b/archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service new file mode 120000 index 0000000..cabf28b --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-time-wait-sync.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-time-wait-sync.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service b/archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service new file mode 120000 index 0000000..cd00411 --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/sysinit.target.wants/systemd-timesyncd.service @@ -0,0 +1 @@ +/usr/lib/systemd/system/systemd-timesyncd.service \ No newline at end of file diff --git a/archiso/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf b/archiso/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf new file mode 100644 index 0000000..c9f9bce --- /dev/null +++ b/archiso/airootfs/etc/systemd/system/systemd-networkd-wait-online.service.d/wait-for-only-one-interface.conf @@ -0,0 +1,6 @@ +# Allow systemd-networkd-wait-online to succeed with one interface, otherwise, if multiple network interfaces exist, +# network-online.target gets needlessly delayed. +# See https://wiki.archlinux.org/title/systemd-networkd#systemd-networkd-wait-online +[Service] +ExecStart= +ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any diff --git a/archiso/airootfs/etc/xdg/reflector/reflector.conf b/archiso/airootfs/etc/xdg/reflector/reflector.conf new file mode 100644 index 0000000..7c830d2 --- /dev/null +++ b/archiso/airootfs/etc/xdg/reflector/reflector.conf @@ -0,0 +1,8 @@ +# Reflector configuration file for the systemd service. + +--save /etc/pacman.d/mirrorlist +--ipv4 +--ipv6 +--protocol https +--latest 20 +--sort rate diff --git a/archiso/airootfs/root/.automated_script.sh b/archiso/airootfs/root/.automated_script.sh new file mode 100755 index 0000000..f7f3ced --- /dev/null +++ b/archiso/airootfs/root/.automated_script.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash + +script_cmdline() { + local param + for param in $(/etc/pacman.d/mirrorlist < +# $2 +# $3 +unmute_and_set_level() { + [[ -n "$3" && -n "$2" && -n "$1" ]] || bugout + systemd-cat -t "livecdsound" printf "Setting: %s on card: %s to %s\n" "$2" "$1" "$3" + systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3" unmute + return 0 +} + +# $1 +# $2 +mute_and_zero_level() { + [[ -n "$1" && -n "$2" ]] || bugout + systemd-cat -t "livecdsound" printf "Muting control: %s on card: %s\n" "$2" "$1" + systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "0%" mute + return 0 +} + +# $1 +# $2 +# $3 "on" | "off" +switch_control() { + [[ -n "$3" && -n "$1" ]] || bugout + systemd-cat -t "livecdsound" printf "Switching control: %s on card: %s to %s\n" "$2" "$1" "$3" + systemd-cat -t "livecdsound" amixer -c "$1" set "$2" "$3" + return 0 +} + +# $1 +sanify_levels_on_card() { + unmute_and_set_level "$1" "Front" "80%" + unmute_and_set_level "$1" "Master" "80%" + unmute_and_set_level "$1" "Master Mono" "80%" + unmute_and_set_level "$1" "Master Digital" "80%" # E.g., cs4237B + unmute_and_set_level "$1" "Playback" "80%" + unmute_and_set_level "$1" "Headphone" "100%" + unmute_and_set_level "$1" "PCM" "80%" + unmute_and_set_level "$1" "PCM,1" "80%" # E.g., ess1969 + unmute_and_set_level "$1" "DAC" "80%" # E.g., envy24, cs46xx + unmute_and_set_level "$1" "DAC,0" "80%" # E.g., envy24 + unmute_and_set_level "$1" "DAC,1" "80%" # E.g., envy24 + unmute_and_set_level "$1" "Synth" "80%" + unmute_and_set_level "$1" "CD" "80%" + unmute_and_set_level "$1" "PC Speaker" "100%" + + mute_and_zero_level "$1" "Mic" + mute_and_zero_level "$1" "IEC958" # Ubuntu #19648 + + # Intel P4P800-MX + switch_control "$1" "Master Playback Switch" on + switch_control "$1" "Master Surround" on + + # Trident/YMFPCI/emu10k1: + unmute_and_set_level "$1" "Wave" "80%" + unmute_and_set_level "$1" "Music" "80%" + unmute_and_set_level "$1" "AC97" "80%" + + # DRC: + unmute_and_set_level "$1" "Dynamic Range Compression" "80%" + + # Required for HDA Intel (hda-intel): + unmute_and_set_level "$1" "Front" "80%" + + # Required for SB Live 7.1/24-bit (ca0106): + unmute_and_set_level "$1" "Analog Front" "80%" + + # Required at least for Via 823x hardware on DFI K8M800-MLVF Motherboard + switch_control "$1" "IEC958 Capture Monitor" off + + # Required for hardware allowing toggles for AC97 through IEC958, + # valid values are 0, 1, 2, 3. Needs to be set to 0 for PCM1. + unmute_and_set_level "$1" "IEC958 Playback AC97-SPSA" "0" + + # Required for newer Via hardware + unmute_and_set_level "$1" "VIA DXS,0" "80%" + unmute_and_set_level "$1" "VIA DXS,1" "80%" + unmute_and_set_level "$1" "VIA DXS,2" "80%" + unmute_and_set_level "$1" "VIA DXS,3" "80%" + + # Required on some notebooks with ICH4: + switch_control "$1" "Headphone Jack Sense" off + switch_control "$1" "Line Jack Sense" off + + # Some machines need one or more of these to be on; + # others need one or more of these to be off: + + switch_control "$1" "Audigy Analog/Digital Output Jack" on + switch_control "$1" "SB Live Analog/Digital Output Jack" on + + # D1984 -- Thinkpad T61/X61 + switch_control "$1" "Speaker" on + switch_control "$1" "Headphone" on + + # HDA-Intel w/ "Digital" capture mixer (See Ubuntu #193823) + unmute_and_set_level "$1" "Digital" "80%" + + return 0 +} + +# $1 | "all" +sanify_levels() { + local ttsdml_returnstatus=0 + local card + case "$1" in + all) + for card in $(echo_card_indices); do + sanify_levels_on_card "$card" || ttsdml_returnstatus=1 + done + ;; + *) + sanify_levels_on_card "$1" || ttsdml_returnstatus=1 + ;; + esac + return "$ttsdml_returnstatus" +} + +# List all cards that *should* be usable for PCM audio. In my experience, +# the console speaker (handled by the pcsp driver) isn't a suitable playback +# device, so we'll exclude it. +list_non_pcsp_cards() { + for card in $(echo_card_indices); do + local cardfile="/proc/asound/card${card}/id" + if [[ -r "$cardfile" && -f "$cardfile" && "$(cat "$cardfile")" != pcsp ]]; then + echo "$card" + fi + done +} + +# Properly initialize the sound card so that we have audio at boot. +unmute_all_cards() { + sanify_levels all +} + +is_numeric() { + local str="$1" + [[ "$str" =~ ^[0-9]+$ ]] +} + +set_default_card() { + local card="$1" + sed -e "s/%card%/$card/g" /etc/asound.conf +} + +play_on_card() { + local card="$1" file="$2" + aplay -q "-Dplughw:$card,0" "$file" +} + +# If there are multiple usable sound cards, prompt the user to choose one, +# using auditory feedback. +pick_a_card() { + set -f + usable_cards="$(list_non_pcsp_cards)" + num_usable_cards="$(wc -w <<<"$usable_cards")" + + if (( num_usable_cards == 1 )); then + systemd-cat -t "livecdsound" printf "Only one sound card is detected\n" + exit 0 + fi + systemd-cat -t "livecdsound" printf "multiple sound cards detected\n" + for card in "${usable_cards[@]}"; do + if ! is_numeric "$card"; then + continue + fi + play_on_card "$card" /usr/share/livecd-sounds/pick-a-card.wav & + done + wait + sleep 1 + for card in "${usable_cards[@]}"; do + if ! is_numeric "$card"; then + continue + fi + play_on_card "$card" /usr/share/livecd-sounds/beep.wav + if read -r -t 10; then + systemd-cat -t "livecdsound" printf "Selecting %s sound card as default\n" "$card" + set_default_card "$card" + break + fi + done +} + +if (( $# == 0 )); then + echo "error: No argument passed." + exit 1 +fi +while [[ "${1}" != "" ]]; do + case ${1} in + -h|--help) + usage + exit + ;; + -u|--unmute) + systemd-cat -t "livecdsound" printf "Unmuting all cards" + unmute_all_cards + ;; + -p|--pick) + pick_a_card + ;; + *) + echo "error: Unsupported argument" + usage + exit 1 + ;; + esac + shift +done diff --git a/archiso/airootfs/usr/local/share/livecd-sound/asound.conf.in b/archiso/airootfs/usr/local/share/livecd-sound/asound.conf.in new file mode 100644 index 0000000..3f9c7aa --- /dev/null +++ b/archiso/airootfs/usr/local/share/livecd-sound/asound.conf.in @@ -0,0 +1,3 @@ +Defaults node +defaults.ctl.card %card%; +defaults.pcm.card %card%; diff --git a/archiso/bootstrap_packages.x86_64 b/archiso/bootstrap_packages.x86_64 new file mode 100644 index 0000000..64966d0 --- /dev/null +++ b/archiso/bootstrap_packages.x86_64 @@ -0,0 +1,2 @@ +arch-install-scripts +base diff --git a/archiso/efiboot/loader/entries/01-archiso-x86_64-linux.conf b/archiso/efiboot/loader/entries/01-archiso-x86_64-linux.conf new file mode 100644 index 0000000..bc8ab33 --- /dev/null +++ b/archiso/efiboot/loader/entries/01-archiso-x86_64-linux.conf @@ -0,0 +1,5 @@ +title Arch Linux install medium (x86_64, UEFI) +sort-key 01 +linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +options archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% diff --git a/archiso/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf b/archiso/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf new file mode 100644 index 0000000..c0cb1c8 --- /dev/null +++ b/archiso/efiboot/loader/entries/02-archiso-x86_64-speech-linux.conf @@ -0,0 +1,5 @@ +title Arch Linux install medium (x86_64, UEFI) with speech +sort-key 02 +linux /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +initrd /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +options archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on diff --git a/archiso/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf b/archiso/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf new file mode 100644 index 0000000..d0b305c --- /dev/null +++ b/archiso/efiboot/loader/entries/03-archiso-x86_64-memtest86+.conf @@ -0,0 +1,3 @@ +title Memtest86+ +sort-key 03 +efi /boot/memtest86+/memtest.efi diff --git a/archiso/efiboot/loader/loader.conf b/archiso/efiboot/loader/loader.conf new file mode 100644 index 0000000..2d137aa --- /dev/null +++ b/archiso/efiboot/loader/loader.conf @@ -0,0 +1,3 @@ +timeout 15 +default 01-archiso-x86_64-linux.conf +beep on diff --git a/archiso/grub/grub.cfg b/archiso/grub/grub.cfg new file mode 100644 index 0000000..25194a3 --- /dev/null +++ b/archiso/grub/grub.cfg @@ -0,0 +1,107 @@ +# Load partition table and file system modules +insmod part_gpt +insmod part_msdos +insmod fat +insmod iso9660 +insmod ntfs +insmod ntfscomp +insmod exfat +insmod udf + +# Use graphics-mode output +if loadfont "${prefix}/fonts/unicode.pf2" ; then + insmod all_video + set gfxmode="auto" + terminal_input console + terminal_output console +fi + +# Enable serial console +insmod serial +insmod usbserial_common +insmod usbserial_ftdi +insmod usbserial_pl2303 +insmod usbserial_usbdebug +if serial --unit=0 --speed=115200; then + terminal_input --append serial + terminal_output --append serial +fi + +# Get a human readable platform identifier +if [ "${grub_platform}" == 'efi' ]; then + archiso_platform='UEFI' + if [ "${grub_cpu}" == 'x86_64' ]; then + archiso_platform="x64 ${archiso_platform}" + elif [ "${grub_cpu}" == 'i386' ]; then + archiso_platform="IA32 ${archiso_platform}" + else + archiso_platform="${grub_cpu} ${archiso_platform}" + fi +elif [ "${grub_platform}" == 'pc' ]; then + archiso_platform='BIOS' +else + archiso_platform="${grub_cpu} ${grub_platform}" +fi + +# Set default menu entry +default=archlinux +timeout=15 +timeout_style=menu + + +# Menu entries + +menuentry "Arch Linux install medium (%ARCH%, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + +menuentry "Arch Linux install medium with speakup screen reader (%ARCH%, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + + +if [ "${grub_platform}" == 'efi' -a "${grub_cpu}" == 'x86_64' -a -f '/boot/memtest86+/memtest.efi' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest.efi + } +fi +if [ "${grub_platform}" == 'pc' -a -f '/boot/memtest86+/memtest' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest + } +fi +if [ "${grub_platform}" == 'efi' ]; then + if [ "${grub_cpu}" == 'x86_64' -a -f '/shellx64.efi' ]; then + menuentry 'UEFI Shell' --class efi { + chainloader /shellx64.efi + } + elif [ "${grub_cpu}" == "i386" -a -f '/shellia32.efi' ]; then + menuentry 'UEFI Shell' --class efi { + chainloader /shellia32.efi + } + fi + + menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' { + fwsetup + } +fi + +menuentry 'System shutdown' --class shutdown --class poweroff { + echo 'System shutting down...' + halt +} + +menuentry 'System restart' --class reboot --class restart { + echo 'System rebooting...' + reboot +} + + +# GRUB init tune for accessibility +play 600 988 1 1319 4 diff --git a/archiso/grub/loopback.cfg b/archiso/grub/loopback.cfg new file mode 100644 index 0000000..d7d5ece --- /dev/null +++ b/archiso/grub/loopback.cfg @@ -0,0 +1,80 @@ +# https://www.supergrubdisk.org/wiki/Loopback.cfg + +# Search for the ISO volume +search --no-floppy --set=archiso_img_dev --file "${iso_path}" +probe --set archiso_img_dev_uuid --fs-uuid "${archiso_img_dev}" + +# Get a human readable platform identifier +if [ "${grub_platform}" == 'efi' ]; then + archiso_platform='UEFI' + if [ "${grub_cpu}" == 'x86_64' ]; then + archiso_platform="x64 ${archiso_platform}" + elif [ "${grub_cpu}" == 'i386' ]; then + archiso_platform="IA32 ${archiso_platform}" + else + archiso_platform="${grub_cpu} ${archiso_platform}" + fi +elif [ "${grub_platform}" == 'pc' ]; then + archiso_platform='BIOS' +else + archiso_platform="${grub_cpu} ${grub_platform}" +fi + +# Set default menu entry +default=archlinux +timeout=15 +timeout_style=menu + + +# Menu entries + +menuentry "Arch Linux install medium (%ARCH%, ${archiso_platform})" --class arch --class gnu-linux --class gnu --class os --id 'archlinux' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}" + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + +menuentry "Arch Linux install medium with speakup screen reader (%ARCH%, ${archiso_platform})" --hotkey s --class arch --class gnu-linux --class gnu --class os --id 'archlinux-accessibility' { + set gfxpayload=keep + linux /%INSTALL_DIR%/boot/%ARCH%/vmlinuz-linux archisobasedir=%INSTALL_DIR% img_dev=UUID=${archiso_img_dev_uuid} img_loop="${iso_path}" accessibility=on + initrd /%INSTALL_DIR%/boot/%ARCH%/initramfs-linux.img +} + + +if [ "${grub_platform}" == 'efi' -a "${grub_cpu}" == 'x86_64' -a -f '/boot/memtest86+/memtest.efi' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest.efi + } +fi +if [ "${grub_platform}" == 'pc' -a -f '/boot/memtest86+/memtest' ]; then + menuentry 'Run Memtest86+ (RAM test)' --class memtest86 --class memtest --class gnu --class tool { + set gfxpayload=800x600,1024x768 + linux /boot/memtest86+/memtest + } +fi +if [ "${grub_platform}" == 'efi' ]; then + if [ "${grub_cpu}" == 'x86_64' -a -f '/shellx64.efi' ]; then + menuentry 'UEFI Shell' --class efi { + chainloader /shellx64.efi + } + elif [ "${grub_cpu}" == "i386" -a -f '/shellia32.efi' ]; then + menuentry 'UEFI Shell' --class efi { + chainloader /shellia32.efi + } + fi + + menuentry 'UEFI Firmware Settings' --id 'uefi-firmware' { + fwsetup + } +fi + +menuentry 'System shutdown' --class shutdown --class poweroff { + echo 'System shutting down...' + halt +} + +menuentry 'System restart' --class reboot --class restart { + echo 'System rebooting...' + reboot +} diff --git a/archiso/packages.x86_64 b/archiso/packages.x86_64 new file mode 100644 index 0000000..1e9a752 --- /dev/null +++ b/archiso/packages.x86_64 @@ -0,0 +1,128 @@ +alsa-utils +amd-ucode +arch-install-scripts +archinstall +b43-fwcutter +base +bcachefs-tools +bind +bolt +brltty +broadcom-wl +btrfs-progs +clonezilla +cloud-init +cryptsetup +darkhttpd +ddrescue +dhclient +dhcpcd +diffutils +dmidecode +dmraid +dnsmasq +dosfstools +e2fsprogs +edk2-shell +efibootmgr +espeakup +ethtool +exfatprogs +f2fs-tools +fatresize +foot-terminfo +fsarchiver +gpart +gpm +gptfdisk +grml-zsh-config +grub +hdparm +hyperv +intel-ucode +irssi +iw +iwd +jfsutils +kitty-terminfo +ldns +less +lftp +libfido2 +libusb-compat +linux +linux-atm +linux-firmware +linux-firmware-marvell +livecd-sounds +lsscsi +lvm2 +lynx +man-db +man-pages +mc +mdadm +memtest86+ +memtest86+-efi +mkinitcpio +mkinitcpio-archiso +mkinitcpio-nfs-utils +modemmanager +mtools +nano +nbd +ndisc6 +nfs-utils +nilfs-utils +nmap +ntfs-3g +nvme-cli +open-iscsi +open-vm-tools +openconnect +openpgp-card-tools +openssh +openvpn +partclone +parted +partimage +pcsclite +ppp +pptpclient +pv +qemu-guest-agent +refind +reflector +rp-pppoe +rsync +rxvt-unicode-terminfo +screen +sdparm +sequoia-sq +sg3_utils +smartmontools +sof-firmware +squashfs-tools +sudo +syslinux +systemd-resolvconf +tcpdump +terminus-font +testdisk +tmux +tpm2-tools +tpm2-tss +udftools +usb_modeswitch +usbmuxd +usbutils +vim +virtualbox-guest-utils-nox +vpnc +wireless-regdb +wireless_tools +wpa_supplicant +wvdial +xfsprogs +xl2tpd +zsh diff --git a/archiso/pacman.conf b/archiso/pacman.conf new file mode 100644 index 0000000..e7e6497 --- /dev/null +++ b/archiso/pacman.conf @@ -0,0 +1,100 @@ +# +# /etc/pacman.conf +# +# See the pacman.conf(5) manpage for option and repository directives + +# +# GENERAL OPTIONS +# +[options] +# The following paths are commented out with their default values listed. +# If you wish to use different paths, uncomment and update the paths. +#RootDir = / +#DBPath = /var/lib/pacman/ +#CacheDir = /var/cache/pacman/pkg/ +#LogFile = /var/log/pacman.log +#GPGDir = /etc/pacman.d/gnupg/ +#HookDir = /etc/pacman.d/hooks/ +HoldPkg = pacman glibc +#XferCommand = /usr/bin/curl -L -C - -f -o %o %u +#XferCommand = /usr/bin/wget --passive-ftp -c -O %o %u +#CleanMethod = KeepInstalled +Architecture = auto + +# Pacman won't upgrade packages listed in IgnorePkg and members of IgnoreGroup +#IgnorePkg = +#IgnoreGroup = + +#NoUpgrade = +#NoExtract = + +# Misc options +#UseSyslog +#Color +#NoProgressBar +# We cannot check disk space from within a chroot environment +#CheckSpace +#VerbosePkgLists +ParallelDownloads = 5 +#DownloadUser = alpm +#DisableSandbox + +# By default, pacman accepts packages signed by keys that its local keyring +# trusts (see pacman-key and its man page), as well as unsigned packages. +SigLevel = Required DatabaseOptional +LocalFileSigLevel = Optional +#RemoteFileSigLevel = Required + +# NOTE: You must run `pacman-key --init` before first using pacman; the local +# keyring can then be populated with the keys of all official Arch Linux +# packagers with `pacman-key --populate archlinux`. + +# +# REPOSITORIES +# - can be defined here or included from another file +# - pacman will search repositories in the order defined here +# - local/custom mirrors can be added here or in separate files +# - repositories listed first will take precedence when packages +# have identical names, regardless of version number +# - URLs will have $repo replaced by the name of the current repo +# - URLs will have $arch replaced by the name of the architecture +# +# Repository entries are of the format: +# [repo-name] +# Server = ServerName +# Include = IncludePath +# +# The header [repo-name] is crucial - it must be present and +# uncommented to enable the repo. +# + +# The testing repositories are disabled by default. To enable, uncomment the +# repo name header and Include lines. You can add preferred servers immediately +# after the header, and they will be used before the default mirrors. + +#[core-testing] +#Include = /etc/pacman.d/mirrorlist + +[core] +Include = /etc/pacman.d/mirrorlist + +#[extra-testing] +#Include = /etc/pacman.d/mirrorlist + +[extra] +Include = /etc/pacman.d/mirrorlist + +# If you want to run 32 bit applications on your x86_64 system, +# enable the multilib repositories as required here. + +#[multilib-testing] +#Include = /etc/pacman.d/mirrorlist + +#[multilib] +#Include = /etc/pacman.d/mirrorlist + +# An example of a custom package repository. See the pacman manpage for +# tips on creating your own repositories. +#[custom] +#SigLevel = Optional TrustAll +#Server = file:///home/custompkgs diff --git a/archiso/profiledef.sh b/archiso/profiledef.sh new file mode 100644 index 0000000..ce26e79 --- /dev/null +++ b/archiso/profiledef.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash +# shellcheck disable=SC2034 + +iso_name="archlinux" +iso_label="ARCH_$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y%m)" +iso_publisher="Arch Linux " +iso_application="Arch Linux Live/Rescue DVD" +iso_version="$(date --date="@${SOURCE_DATE_EPOCH:-$(date +%s)}" +%Y.%m.%d)" +install_dir="arch" +buildmodes=('iso') +bootmodes=('bios.syslinux.mbr' 'bios.syslinux.eltorito' + 'uefi-ia32.systemd-boot.esp' 'uefi-x64.systemd-boot.esp' + 'uefi-ia32.systemd-boot.eltorito' 'uefi-x64.systemd-boot.eltorito') +arch="x86_64" +pacman_conf="pacman.conf" +airootfs_image_type="squashfs" +airootfs_image_tool_options=('-comp' 'xz' '-Xbcj' 'x86' '-b' '1M' '-Xdict-size' '1M') +bootstrap_tarball_compression=('zstd' '-c' '-T0' '--auto-threads=logical' '--long' '-19') +file_permissions=( + ["/etc/shadow"]="0:0:400" + ["/root"]="0:0:750" + ["/root/.automated_script.sh"]="0:0:755" + ["/root/.gnupg"]="0:0:700" + ["/usr/local/bin/choose-mirror"]="0:0:755" + ["/usr/local/bin/Installation_guide"]="0:0:755" + ["/usr/local/bin/livecd-sound"]="0:0:755" +) diff --git a/archiso/syslinux/archiso_head.cfg b/archiso/syslinux/archiso_head.cfg new file mode 100644 index 0000000..671ab4e --- /dev/null +++ b/archiso/syslinux/archiso_head.cfg @@ -0,0 +1,28 @@ +SERIAL 0 115200 +UI vesamenu.c32 +MENU TITLE Arch Linux +MENU BACKGROUND splash.png + +MENU WIDTH 78 +MENU MARGIN 4 +MENU ROWS 7 +MENU VSHIFT 10 +MENU TABMSGROW 14 +MENU CMDLINEROW 14 +MENU HELPMSGROW 16 +MENU HELPMSGENDROW 29 + +# Refer to https://wiki.syslinux.org/wiki/index.php/Comboot/menu.c32 + +MENU COLOR border 30;44 #40ffffff #a0000000 std +MENU COLOR title 1;36;44 #9033ccff #a0000000 std +MENU COLOR sel 7;37;40 #e0ffffff #20ffffff all +MENU COLOR unsel 37;44 #50ffffff #a0000000 std +MENU COLOR help 37;40 #c0ffffff #a0000000 std +MENU COLOR timeout_msg 37;40 #80ffffff #00000000 std +MENU COLOR timeout 1;37;40 #c0ffffff #00000000 std +MENU COLOR msg07 37;40 #90ffffff #a0000000 std +MENU COLOR tabmsg 31;40 #30ffffff #00000000 std + +MENU CLEAR +MENU IMMEDIATE diff --git a/archiso/syslinux/archiso_pxe-linux.cfg b/archiso/syslinux/archiso_pxe-linux.cfg new file mode 100644 index 0000000..5d0f741 --- /dev/null +++ b/archiso/syslinux/archiso_pxe-linux.cfg @@ -0,0 +1,32 @@ +LABEL arch64_nbd +TEXT HELP +Boot the Arch Linux install medium using NBD. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, NBD) +LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% archiso_nbd_srv=${pxeserver} cms_verify=y +SYSAPPEND 3 + +LABEL arch64_nfs +TEXT HELP +Boot the Arch Linux live medium using NFS. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, NFS) +LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archiso_nfs_srv=${pxeserver}:/run/archiso/bootmnt cms_verify=y +SYSAPPEND 3 + +LABEL arch64_http +TEXT HELP +Boot the Arch Linux live medium using HTTP. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, HTTP) +LINUX ::/%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD ::/%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archiso_http_srv=http://${pxeserver}/ cms_verify=y +SYSAPPEND 3 diff --git a/archiso/syslinux/archiso_pxe.cfg b/archiso/syslinux/archiso_pxe.cfg new file mode 100644 index 0000000..b4c9a80 --- /dev/null +++ b/archiso/syslinux/archiso_pxe.cfg @@ -0,0 +1,5 @@ +INCLUDE archiso_head.cfg + +INCLUDE archiso_pxe-linux.cfg + +INCLUDE archiso_tail.cfg diff --git a/archiso/syslinux/archiso_sys-linux.cfg b/archiso/syslinux/archiso_sys-linux.cfg new file mode 100644 index 0000000..919e158 --- /dev/null +++ b/archiso/syslinux/archiso_sys-linux.cfg @@ -0,0 +1,20 @@ +LABEL arch64 +TEXT HELP +Boot the Arch Linux install medium on BIOS. +It allows you to install Arch Linux or perform system maintenance. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, BIOS) +LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% + +# Accessibility boot option +LABEL arch64speech +TEXT HELP +Boot the Arch Linux install medium on BIOS with speakup screen reader. +It allows you to install Arch Linux or perform system maintenance with speech feedback. +ENDTEXT +MENU LABEL Arch Linux install medium (x86_64, BIOS) with ^speech +LINUX /%INSTALL_DIR%/boot/x86_64/vmlinuz-linux +INITRD /%INSTALL_DIR%/boot/x86_64/initramfs-linux.img +APPEND archisobasedir=%INSTALL_DIR% archisosearchuuid=%ARCHISO_UUID% accessibility=on diff --git a/archiso/syslinux/archiso_sys.cfg b/archiso/syslinux/archiso_sys.cfg new file mode 100644 index 0000000..d93bcfe --- /dev/null +++ b/archiso/syslinux/archiso_sys.cfg @@ -0,0 +1,8 @@ +INCLUDE archiso_head.cfg + +DEFAULT arch64 +TIMEOUT 150 + +INCLUDE archiso_sys-linux.cfg + +INCLUDE archiso_tail.cfg diff --git a/archiso/syslinux/archiso_tail.cfg b/archiso/syslinux/archiso_tail.cfg new file mode 100644 index 0000000..e84897c --- /dev/null +++ b/archiso/syslinux/archiso_tail.cfg @@ -0,0 +1,35 @@ +LABEL existing +TEXT HELP +Boot an existing operating system. +Press TAB to edit the disk and partition number to boot. +ENDTEXT +MENU LABEL Boot existing OS +COM32 chain.c32 +APPEND hd0 0 + +# https://www.memtest.org/ +LABEL memtest +MENU LABEL Run Memtest86+ (RAM test) +LINUX /boot/memtest86+/memtest + +# https://wiki.syslinux.org/wiki/index.php/Hdt_(Hardware_Detection_Tool) +LABEL hdt +MENU LABEL Hardware Information (HDT) +COM32 hdt.c32 +APPEND modules_alias=hdt/modalias.gz pciids=hdt/pciids.gz + +LABEL reboot +TEXT HELP +Reboot computer. +The computer's firmware must support APM. +ENDTEXT +MENU LABEL Reboot +COM32 reboot.c32 + +LABEL poweroff +TEXT HELP +Power off computer. +The computer's firmware must support APM. +ENDTEXT +MENU LABEL Power Off +COM32 poweroff.c32 diff --git a/archiso/syslinux/splash.png b/archiso/syslinux/splash.png new file mode 100644 index 0000000000000000000000000000000000000000..64b959a61efb767a58d484601f122f6d4ead5a8a GIT binary patch literal 45400 zcmeAS@N?(olHy`uVBq!ia0y~yU}|7sV0^&A#=yW}dhyN^1_lPk;vjb?hIQv;UNSH+ za29w(7Bet#3xhBt!>l^FH>n02*nmp43TU|^6eag8W(&d<$F%`0JW zE=o--Nlj5G&n(GMaQE~L2yf&QXJAlZ@N{tuskrrKZ}|+Ft26C>%?rMoxl28($;8vL zhiQ_VU?YR4f(swp;Y~BP{!O@+ec;}FL$kg=Z@Ry4GP}2RWB!MA>)#%~!6w}kY2c}l zGErrUz$wdf8osYM=dM1tvp(d-tC#O)zMIJxYFk^;CK+n6bKmEA->vU|pQstUtboU> zMSy3z(Z@3x@A<#`n4RAKYp+wa`t+Yqi|;M{>|=F)>F*r1d#A(y%_&Z??%mQ8a{u&| z;+uQyCsqHfQxCp=Hp*?;eZ$+f+IP->HFmajpLl#qXWyCde`&M7?2K4&=8vD*F|Fvz zwCa1}QIF=lwx4<8_^Su!bsVniY|@$RaNH|(wxita+_lEcJ2nR`N^@AACR!9G`NpT- zCz(?ws`QWXS&^BXJ5q#r(ztBICYwIn9lF00AK`egasc&5AFbIz?^%OeCG#3CJD zHy^G!m%aJjlDBkI8ZY+Urg)*kJh7&EG@@BJ+cn_bvmbZ3TI?&$p1c`Igt~eZvG@A zku7~7XNv3Eu%AlY8Mz;lzkSvYyR&fFBF=YQOCt2|c2Z{hJnY6~QaihsDA?MdOzy(GG} zZtX|EiL5$rTvhMqYPy{Mu;`b0eW})!iq}8?^_@xiGm-b3J{v=n?+LNU18-_7j+U?C zl{s^YNsNm_=gHw$u3z&L8QrvZv~K*=woBlNI6UmU1wiz5Z{}uj{)WteLQ;i96TWcv|d!iTR6n&MIj&JE2*=Ey2CuqwIwAwIS;T zF27&Y^?ru9i%3)afsIUIT$-X+_g`C;y->QoN40Xo*-aVSxU@GloZ7u`+0TT>vkolR zW949F)Zf$~b}Qvc_PrUUeX})fQWok<&1CuH`t|(_hlqs{to^N)0V)53>icHxZ466i zbiN$!@JJ@-jtj@-=?n}U3oZX99OJs6-O_wE>_$wlsX&CuJ45&ReW7OO&lv4`@$2ZV z)Qe8}32}BtU(1)Q;taZ5VsPwWZdu3W>8toRC~;>jvWh-ySfW_loYt>4S${+JvfjYJ zzu9Yd^*v2Ca{Z>i_xTD@sVrNu0L$m%vo`VUS;EwEdV&P|{2dG>e?p#eYCZXKSd(e* zp{PGxt*l#aIpuEqCORw8FYs@)#Qm9}vHN>k?R+>H`nC!b&a9f=tnvKMoTVKm=Yp+f z3bd$5Zdxt!Z6)_r_HLa8QxC43`FyqL!7{a*+a4(;zcUHDx<8Di_+~`=r>%u%-BI^+ z-rS$SU@*CN;~_oMWQK_vZ{l}UGA`Mb`AU^*CZl5KLA&o>3${o-*i#{Pf$4!s^!GIy zIb9D<$Gkmx^oRJ>{nxS%NAz*d$>ry6tuX0}N-g+o+puz(v# zAF4K_Et(Kxn=C38AZ5<^uyd`J(vk-O9S1iY5lE9+cWw2-l?(-ZPiC;5*?vINs_oq0 zh~=d%2VE2{yn3g9tjX$h)}|v`43|$y@2FY7|L2bRC-NydF%{}_fF za~RThdCg$pFz)L(^DrZ;F~HvWw8`=Zhj_G-jG1jWbMD>vPD^#RgTd`e@lSU)Et1h> z*}CB-XX8dG)st&JC+~Qkp=W)cD}9=qvWeyMgmp$O%hm?0KjQwE!;8m=U50zzwR@Y6 zFqwok#I57Eo&9mQk@n_Eo|YjmrX4>z#r8mk>HYe!8Qree^?$xBpY^)+E>~Wn+vG#N zpATrMsW{$d*~bwaaX|BPV`!|YYs?29PdntiI!>X!@`PVt%s|8?5DE~MAK!sd6nhZMt>tG;cy&x}N6g}lEfFSMMj zx2fT1%GH18#kG^3`7RB8=5_JMVVnDo%YNNBvyK1CDPFVIm)n2Mw)7UvoWboS65o)* z;UGTIvS}iR1Hh$Zb4s)7 zN=V&a@NRE_x>?_8}y;jS0P}IoiGzCkJ7gmc}0fD4f>1z+%_v! z%$ckg=-xalO-X!lTaT`Skr+$H#`B*qPfL2S{m`^Z*Khj2&!?>J&#-H4k(}e)f9fqa z0}~$~)5=Oa4MqiTg%&Lb0hShx1^&!UA`I;A4rvo4nMGZ0EYl4$N-^rvNho8Ifffh2>1?;QR|1zP`?i3CX6$FiE>M5ozwsSifsKWEyf_WD0+s^H2v%6+1Ab$ zT70i}Rki72{;%5?9{#$Y)6pTR!+@=kY1^;N4Ze{p?x|YdPZf=Hc>Sj3tcuGqE)E?R z=D9iN{?^p}KRTh{W^TOQm6NXD^gn-HwsTE}-h^U3^+ucY-mK3HE$WsvTGhIS;|rH`!IE0GvYy5RHCwKqdK14;MSErU+IPQF z*U0c2UOqNAZPli*s-v;(A*%r>W?kcdxkqI531HMNpFtb{wVE8)-n0C7vZZn)@w2! zh$(N7zOkgZt%Jpncvmx8DDanFo&z_xOnk_cRZ@H>N|0mvJfpZM!6mQ;5 z2=V#+H$osIE&ZVD{raEM&5JHZ=N(9#_}6=$%Q;I9MNQFZr;2yJS(0;2z3^XG#`Dc# zO(A{(hYqY{IQv7R(dl01GWnRj=Xp;vJ!CLvIQ);peP=L>s?4@iRu;>2ofd4??PEQY zGTVJp{JMJ^qv8%fHJ`QV%(u6^q5GFDQ}dZ+!Z}&Z*C{wyIPL7L)_L>f{=9IvcdD+o z)>xX*GjrS8o-U3lehwS<$o)H|*5Z9^VdD4h0-hKac1F(w?_HIfm^Zy(n5rtEcRa@Y zHPeLCy{UQ!f)$r<%=!?P@_$pfxuJY_*0On$xv`gauIH>zD`vVpZB=1?s(_=+mfP+! z3RmPVOyg&25SArm21}yQ7{naj#k|DUvpLK+2a|h zoAq43<(GK+Y%fYniZ41TCg8=W*6bh4v~VTs6pb84Lyejpj6VvMKPYc>2xxBp72nca zyg*;)aPDSChB>Ca8~n3fUra7fiqqND;3{Si-lP#(xk%&Dx7+#0O|Qo^fBIBZVKYzS z06W7b9p`DOH{O2Rav*+RgTix}NoRW-Z$-XhU6!+FhRu^_-m4@14>Qe~U9O$tuG#dI zSHPKhh0V^$seGL?osD%EW}e%>;@?@m08{1y%}w>n=MS&Z+nr&?;_tYtHPL8B27BgC z9wtVM$&Q+V=RZlF`=e<0Wp?3Kj}*~0GbgmDvU{R7gxFvq4bKbI}zs~hPPx!O;z>Sp8(RwUq>jj=h?Ryq9 z@vpSq#Tv6?MR|!*Y0Z9dOPVZJz5ln^u+B5dz~j-u2MNgnjSNQ2Y)(GB+U!%V_&3&` zYSK^+T;QO8Uw&EWoF%hdEsT!|@USs5Oj2nyWb@K=32af|$c$uo&ds5As#}=Juk{7{ ztfWhh$|BqRy%WD%UU& z(9LvUX5-)B*gXjwc8f1!cH(kY5oqp~c)N&=#gef}$hoCZHelM8b*EPcXl!b@7NudV zJ3+|yw57X+OxS^bt{+8f=b8QMd9v4M*{aLYhKc9nukyz*Ogube!*ACsvNgf%tw&Nm z>qvLkUi?0P>%n40%R0H&Z{k;-zgY9$Nk>?HN19U3X1!2JTdq}BMb{3-Gkw?FsQ8Fu zMWgJJSN$Jt8yOUjJ>)j#&~hj-J>O!mG;}TN$(;&jhpp4jo<5bH>_xAjQJ08E6J}`f0%Brb1?N_g8?JlhUygP0-tHP|k`&Z7i z&ocJSvC8MoDN|>gSY8#NYy_PyAhRWoc(k|esbeq zZ!U(lSpt*Rwoa`+cJNw}qyxjb)X=T7E%w}g5V61WfPyCn+tg|$#SiWhe+1baLzQ8xKNW_Dlg+Nn?JYc|x+`TT_8 zLJynb&m!*R**5WvrJGn9-JJJGPK;R-J^e*~Rsvh;vkM2f)Ql7aIUF4xad>*ouxw;{ zck{I4G5^qbp-tZe`&9NTacB4`&g5>M;FKgMq~>&h)o|%IL1vaSZ5z&&+0Q=sWAThL z%sgjrtW)|u{ie%V6UMW*HePD4XX9jbV39tslkbT}r|CBjHjd7Pi#zjdCf#Xh5m0Sv z&_Ck9!79;wH@0um&Tx&H29k?Q^(Ja31f?);4nJNavtDAdUv+1Iz~4mHZ|ehY+HB6N zIJ<4*+3(*?rrp?|$haU>yw&Hu&=cio!J4m`4t*=^&PA+IY+rZGRH8$Lp;=_5A zha?W%dBG6X&z%zy)}xA%b>E1TmImHIYF1-?8dp1Ypook!c`H1}~f3x0*C(kSNn{YYfdPZx-y2H16?F3IZ zOK5K}a!tsPI}n@l|4d-mw*E(*E7RtkzOi~)hp^6#11lMnS{EsNc)-pfu;9rteP@Fv zhqI@qOTYcc6Zl}~L-Ef2b9s1#_ zHf?ui4OLau83u_=YCba>+S=H9inrsFtpa+vZFEy2`O*)#}xTd3P)z6=3q~YinP;e}CO^(MFkbJLTA~ zKP*_VXc1FtYO02|cJtwf7nIX2=K8rP3BI|rQ#fvY`IQ7Ok;U`3s(4yenBI0u(-oK@ zzwPX*1uI_s*59rZztDQ8{-*kylFWveXFm5@kuI&$WjyVmWj!xb{vV+=-nHR=7my*G9itDEKAXy6vtTM`@3dnB`A?Z%CQrKP2ykbL#(l|kK~iYr&I zF5I?FthBWB#p~CH?f-waU%Y?6{FETsH<_8w&di))TWzN1H>cy)t*DUD(3kdn?aI$? zGPCm~e13Me@T~huIuf-yUt#|(?y`u<(SS7NOf zZN&aM+j*7GBwL&oPI*yLrs- zRVb&OnbEjw*RCnQK1>adb5sy$P~a#$;Nxv-Y8tVx#`4+O+3m}gsfC1xFJ85Zt4U#r z4d25830qrRtKwaipVQvl*r>eD-dOWVj#;$KVl57)W&ZQ~JSVFqURvV0V)g3g+i%;> zrd@VEeR5Mzfd$Y0`~BCLgLl~VVcbKv3O_OAgYmg%~eYuS~}uWwR{c(f}(ds9tV z>i0mHlqkutjT+M_J{g%=*9t134WR%M1W>7LZ?l9w^Y7mEr#>!QV*$<;w z%>OF#{eS9pclJB$$!fk$#~)w3y6BeDe7*|9We0y6A3Gqyyj0}u*|R(T|NC8dGj;ky zb^D*3-`?GwT~w>?JF6vhb=c9n*Bxeln=s%Uc5MQVr8<-?eO?o(dXypGBfzhwGz#~w#G3#TRST& z>p|J>(K;XuESz)nsXm0&ADfGgU!lurpYQ- z@73;`zPpucSsF7;Sz_fTmh_*ik~uKt|EI(MUNRV5)>&|s$H~B>V7ktJNfCzhQ%OFo z(l*y?_`Yd!3s!uO^vGowWvnSOuQ_ke`28!tun?CK-7P#@%%;P<)_lAbc%Y3^T*=F8T$w=ra=JTAS(4`a=74_k< z{C^35yPqm%xwobS)hbW);8}2~VU^$#341Hv4Z89BWa59{x(+HjQkxY#cL|;-V0eC* z-`*uZKfmW7C&QT;hRo%6OU1+1#YiqTnx>-37LZlyle)*mS!}I-jGp*1-`Q=MmzO;} zCY^s|_4<8X=JzU?#r5NQ65ZU5^qCqN>i&J6pZxdNR}Fpryt%+>jw#{tM-*2~X>?l+|H_z7kkyU@#i7Zq8-C7r}Z(tBix6I

~~In5$HjU&Tbb!x)8A`V9Vmd167_mdYfyG(P~!847`dA1O@ z2)mK7Ft=5BR^n#MR=Mss@p}E89XA=uXR-)bZvDZUFn_bqxnq&1oP0Wp_W7HBEAWYB zsJ`s;WBZ<-2ix{H{{F2n-?r)B^Lmc&U;i`xz7i&&q;X6!>clpe1$vDxrcx7l!UVZR zItU2engNvj{!zxOvhrjVA(xZG#vq{(-uv0XD+5F8oV`M&mj^^bGq z`~UMaYb?#k$vKj4|2uL`^me}bpQqzD zBpzn_^8NesIj$Vjt}Wc2$XF#UuJmT5tLOF3C9{oqMZR1;fAnYNcE_?EUj_Q-ef}MA zbmqY@9WI4mubwZgel_*ObsulOFG;6NtRzGQSLL{@*d%z@IBfBwBVr*kKds;FJC`_f z^T7wl%=fYGogA+4W~J+nHGBdt0+vkQZ`wZiC%0AiW@H5?16xUYB3k}q*Z#y0Nv-A{hh=2LTZWJzmf^l|OeaTQR`#tpDb34;}=>?Ea9FP$0o9)F|+!J$1@0 z)*G7b9-60~t!;TfxqQmzhE+>9MMfT28NB?}g3KjZ_e&%ldwENC-~Dmx`o1>(`k$vW z^7Gp@x;)R{Tsrwroqbev^v9j&Yx$;5ojO59Gq8x7fq!`~Rr!+O_M_Ebd7v583U1FmB7a*|hup zKI!lGs`cmirTau*n#RGhdKAvXN4s-o&ek+dtEAeBO25 zQOkJF`l-sEPv>7#yZ`?;&r+xDz~w@~t3tgKt znPxKACbss99C)xUyQTVDYTMt+Z+53H?g@^HTD97(c&5n(mD5I2Qc@pgp09CBpWkMs zJ>6?xL(+{;SJ&5xZcaOUDRN5*q%K^4b?4HhruX&# zfA4tMChexB=g#KkvYV?#N%OqsB00mrkS#XrYMA;0GG+bN|6tlPIpo9fnV;4?TRi2$ z!mIlY&tJ@loTL0`<-wcY_Wk>w9c8PS?sPvpH>HT@#i`II{C=!Y=PV9mXHe-p6@Pm9 z_erxaZ2iQYu&$`VbHd%w7dyWgPssHXICoGuVrBo5d2<53=>8Ik@MQgC9KJC9?BNOC zS|w=(Yj)OYZmNHl`u`C_!ouZCc1N8%(8=)q&{Y8q#uU%U6#~+$d^;~VI(B~Qd-|Yf zH*76{!mS6hc8ZA3|0m}4zJh1VGRcLy`U~Il_dCC{T+QI*)JZ zms0yT+JlO>MVmJZ+yDQ0eq+&7uh_G5&Th*{2+&@=W)08(U+e#OS-;<7%(sRAYTJ^} z7OguMHCs-&vVSQ{=p&P=dHQeG9h;dt-+99(%Qn>>#u}ft7w_ACA5xq$|5jI5^83Y~ zUhLMe-YTjp-tWNi<(N_Nu^p4=G0;*5gVv55Tr9`d%bbg_j_M)|%OgnZ-FE3M%*&KerGMSTU zx4F`Wuc?C|-zkSf0Vm8W456>0dYxm@q(;`il4cE8t)(P@27?e+0KF-n4SsZN>obvkW{iW^q8sA8^ z@3XxAYIdCf*Zm&tgx8tQFAwr|+4vi9x2@j4%!$wJOmqIZ(zaKwjMfv4UvFD+;$Ls< zH~q<;XUuk-R@rf)%aJ3w;V$R-L#su@^?WRUAD?)@mOIIO|Ez`VlT#Z60xq^qy0*1I zFQWIsJKqkOn|yLI4U1D*S;||B`Yt?BJ0>AK!(Dquh3%ujQ)U8*93DJ*vl(VHOwr#h zx9{$3hWPSR>5Q8hzf9U|oO()xqenvcCRr_Lr|;U#_{BF=Khj>Fe|E?<`i|mUEMdA!2);Y~J3l*IFKE-_JZfP4~x3 z|N5>1i#Y-Y*>5eYzv-MheR^ZsSt*8&!mpE0?U7t}_GQmjL6*9Q-0=r4E_N?`aDZ{{ zO&_~wY8}%SWpV4B+sXKE)=R@R@)K33Y<=r;^rWuFOB=J2_?4BM6B%s8`3@C7RA367 ze8KQ})sNR{uDr)rFch?TWa{p@yx!&Qas7sZX@;+_zF~BmRA!edzrQ6Q)YwTlYSF3! zrwg~MtaJ80e_*lOe|wkT&UIQpCda0}h^}GZadsg?S?|iJhcy0wC>Qt>clD8l^|gzx z-`1b_*ZU;WFkF7iOkSs$%VGy@YZvZ1DHih4sYGX)WjBWh%6LWJHn6a<8D{6b#mgA1#qQ7c^d!`>~Xj%32dwc4X8yXsnHjlF&Ms1L4 z45d zMn=YgEt!`$l)Sto5nsLX+RB9s8GU_yZ*0$xk1I=?Q`~YmanF}a-W+VrD^{;QT>Jg* z^5$hVD{F<9K0e<6INkoYWlyra%t% zFVES;?r>$^acK=OSn<+!{vY1H&A;6}xy5hpSNc7DZqd<;dSAjqSdZTk&(Vl2Ypzmh zYYdQL{=*Y(>s-R0w_#c^zrXMzcc#Qu%n@1~1!rT}#5x&bE}j1?$=Smcqs?aOW3 zY;A2TUaeeS@bFNp#Qv(zkRMG72j2F%9r3)@cQCo+;UU(X8ygs_zrQsHsLOF?(9Cj~t`@%aS9s@%kFLM8r@ zoN3*^yw+H3l-&9|u2tZbd4nCFO2U*y3cbf0MUS3}IP~LfJ;QR5TH)!(jtPsu{c!bs z>*DRPsf?S;59!~YXgtX_|8=JG(Qo#PU!T%<+o~!v;gtG;-CyJl@*e+R8}W9PLcxk( z8MTk+Z{pcE?J8SR&`Zne+j14(_N*#C{c=Nn8iTZrd)QsqZ~f0xYuZy8jyGxDFikeR z6D%%~u|q<4t)6@G`KPKKPZA}hSM5rEu8K!Zfw9=vmpAR)oX%Em@uX{O zA`SbNZvC^xL+fFIgum@q5k5H^iDc0^UUP#IXaD~F`{SF<=aUY%@p{IdIkBlH!GL4^ z_3q2d{gXdGJ6rL5Zuy4`&iqSdoo~G?nWbel(e8cnuh5nA_gAeFa&_^2%(u69S8aW; zLkm}g+oD;jS_e{BWo<8e{+VOyb>)zYD^|^%y7T(|9Ri~6|M;|8lMXIy)V#tQ*U>pc z%<16D+=yd*3|@YD&O0`7{+)hjfzg^%7A&*H7UVx%t8xEh(?N}t7iJzyO<%;9u!p>g zHkVk`7&j&Nw{eF~i<(WqI<6QKtLN{S&7|i(?IqS2kI4XzA^CHT*MS@fp`M zKldLjlVWMUVQ<8-RMJtIQQfI##yXcag*K<2q~jgtoeyIhg<4Yk8abL{6*h3PJQj=L z{Qqu0^S#fJ>5P-_O4t1T@$vDGf8Y17cRwaE$3~9-)TvV?qWQ_m%BN19O4xk!L4k#X zrfYq@{jS}+FW$S?*Vo4vv!_C^$FSva;-7!t_aEO=`T4?y3loewR;^oi?#G-fpFaMq z`SDo(f5-kmPxU1vBsv&(y3McdF}SteWqv7U{eljH|=eI)#Q#l`9WlegCq*eec=X=ISD9p3V)t z!S!$d-P>FJ@yliZ$3H$k{$=~N=EZ|Qo%g`+vv!%(V(-U$ac$ zh|OI0(3OcStX9ktTc@qJ`yrO~J)1{J@|uCNXqn4ot|k$ev-83)l-(3((0Y~5>-*s_1$ z$iJwlx})lw?oRHa%-&VMdhH^2{bjwe%U}Cl>Wn#mUxugr_c{7+rtXv59gGQzn;YKU zoW3aK(HseL9k(N{JqZSK%a5+?c&urCWd3VuoxnE6=0c@w4d$AP5*()sZnIcuK3KQ5 zJ^f%7&!4~jo&4Hq0xy=%>fxKdb&ri4KPVGSnmJUk34K&7Olg8q5*ya`vc(_0&xo16P%d;M?oH~02hv)##PV{dl+ zAQ~RCa05ryi(ONuS$_R1tnT;V`u=~W_iDf2wP2Wb=7-bjbQUYdHve8w)nrV z!hhWRzK?zS>8VB>CeI(u{$qQ7XYC5hA8qIICh|0K6gW$&ncp0K|n z$3v`O!P6`jb=|(QRk!M{FZ9*0{F4`CIWJZLv`8ju-_2VmEYIsQXPAj?_;hKu11n=p z_bE6t7F0^Au%JtQ&S8ptP8?`24Bh%WoYn4Co-nen2 z5v*|BChYe?B<>`ElIdt-QS4XST_9lanFa+(dPs%N*~MJ<`&=Q zDN*dv_3T>P{&LP;Eyu)Sm?iQ^qp|#@t;F|l=M`9fC+RGjsrB#h)yW1MK8S5SoHDmo zWKVkFuFtNbJ61pE&}B>LdUO9q!vCNohRp|=o?TUNVRc=~z0T?66>pKR`ifRRE-xyQ zu-zsRY0lTI$iB!;ve|i$pb$6PR$irW#wBrXBI2(q1(mB;OrL+Fp+(?;d?Lp!)*YPg znP)4e#1*OjGPj+6ZQ-|^Xzu&9-|z1DdM(;8`B={k*II+>sb2f$6n8A@n4PzaQ&d#6 zO6F!rql41oj*B%Z6Fpe`ZNE<8`xj)WmzkM)G4$ff9S#>SwaeFa9G9<`c~}rpUcSh1 z?aI1pw+kmE4sSkh*X`WS_p(j%<*|Rhs(XJt>aO~)V$C+V*o^0Km7Ior<$A5(CX z6grM4Lm_=lP=$$CvYZp)#hlc8~@mhsw8A@9Enyj>AfWy|7pFx9jCZ&OO%vWh=jXMC=AOXpEGP*6Pi z#HMq4Wizh_OKJEm=_wC21Rn@!teO_r{?Gs4x;d;%oOqfiWN$Y(d-iO_lZoydik^DO ze#vB$R!+>@vdLt^(xFo^P*M&c@*=(Kmd7l5b^J^X+?|L)e@`gRbg0KxCCnF+XwMT7B z5WN$u7Z_o#rLnOrvE#3`g-rCK*M`@7{;zy^TR>U5#36l;SZ(r)fP!O2$?sNc*?Ms_ z869?Tc_`+ktsS^6W3ASM)RaRr4|^QTetBu>kE8l^3!Aris4P1ET=wmu+>p)7xLK4Y zdbmA*GCO~tWO)0+vL91|d}bIZt~FBeJOnBlOG-;sS?d=^s%$B4c5ZW#PP}*b?%iG8 z^Dnx@oqT++>W0ocj+X2T1Uj6(Ew$Ca+o;qN+`{X?Je#o>YkfzE>piXRgUBpX;JHC$jRy>LJw^z#dT z;}#V*cGVS;Wx5_ue>jSyl-XT#d9M?-g#$FnCnYVd=s8L5qVnV(UP-lvYQ0H1r+-Ph z82Q*|e_y?NbzorN#4yX>-`^hxO;*^1Tgdo2%r}=Gp8Gvhjzub@##8(~&p|aM zcZZ0Sko$2_wX>Nc6RIlwHC*D&Pi?p37UFbCwl8K25Uln7&p2tf(3y8m_a9j^UX&~S z;iI|Ye)pxf`VC%+M-z^-oS7YZEKz4u{Y<&T7pHiijaZq(w<-M{SH-M!rUwf`I-J7; z+4>v!*qSBI9N^uxu4&VY`&`!Q5_K+I9a9_({&X1HizqEU_4!q8)`{s^Zx)#~WJNNu zs+_wZKJ5Twh1cnTZBKTsP&mCXV5UJL)4soN^B3>hB{fNQ8t66-vSkn zl}_=T{`OE(V#xCA=RUIsZhP!nDzoU5*SC@FU)jxQzG|2My z%5xKIqJN~#T6x;t!(wwH`|5^WC7(ol%|8{+Q@dPuqb;Uku3Sib-Rz{q(-scNwZA^H zi0zbGz5I>H)*d!jri(Xhr*=N>FugKCQlXH~^VtN6_9K=l&5P|HPv8&{;9z83q!9Rb zdl0)bi=f=@MsbeD_(vbyC2YzVw{ov{y8q4m;O_HjXLNnE-rM|m&^*JYa?`u$b3J|) z#-{Jv`gEnE`@Zd7vxaBs(xsV<4sUznwA|Eo{#j0@swJwjy55iK1EuMAT zN`8u+ck{i0@OAgg@7-p;xBOtH^mx|8`TLBjXRLf@8M5Jc&pO5*4_bKxw{AK0gR|v;V$coE1aVCnrbgdXHdd*v zCTR~QNM4Yh^l%erL3p3@(M{49KL4s$|E4{Ib#cF{_q2q!x3(5?mo8jZV6mq8K#0BD z?z`)v^_E|VW%WPAw z9N|%ru!HC4%Z0((mS;IFKg-Aj${1i&MsSW;@?c(gqd^ydQUlW z(d5_~ZjVJSv8gNe{z*&Seq3aK{VZwGSe6eKOT?Mkww|58f@#Z!Go=U21*RDaOnW%p zBIR6ZnO`V}%lYrT>Z?UsBp!e5Z%$A+wCGj(q6Vkwy@ynVcDQg^t1bu$G(0_LvAxd1 zLyC*i{&{_Q`^)-CvHPPxOli%mdw##$ow)htC9YhvACc>?bI(7&d^N8uAG?>AS3p?U zv@dgg&OW>twRBlf-{qHA7!$NsE?%tc*E%a~Pxj>c*~*NS3jx(ny)jDpUS*ZNc>`%mGPRla>fI9C_Wa(5R5f(IxD_JpDr# zq$gbzpCmXX`R~!}n*xhU4LlY8wNFVcO!BO5U-^IX0l{gh6<5{YG%;~_yKpV{P$)j& z-1upgR*3FCDcSWho>gK7!8#9)bP5}0Ut6=K+*)eF?R~Y@pedNW)!!GbUCUbsTE_tz zxmmc7QCC+Nv}Qz1H;QHU*=bXEuKLMwX4wbd?L7$wGcI%}2`dz+JU%NS{mmzSo#eru zDa|t6MY%qkH@q}3yg6;*Mx~Eam1bI}zj!je6v1d;p8Z3J0W2)3t!_Rdl!Sf zr&h>)Ex-YH55>LEak40#Gw@|KGRyAHUts zKhDVQ#IYw%-*2u}E5H380fvI7Q^Oza`~B|lpP!%IZTA;#eP~#BW0s-&D!cDS56#pk z-`^m1?c5pbdoj;vdz{P;OG~)%+o|OCEYA52lKanD9$2cV`aI*)b)|ZXb8p#sD->_P zO4|0_^IMh_9c!9mn z{EyrBJXWi+)oJ0DLkmJfLR8+Kk6Go^lRVLXYW6an-#b{( z-F}*U@L`BSwSL2iplL;YQ6>Cm_OTU3&ecj-e9ZDpXxjlE)jsn?qfHOLS%qgkRQf&L zdS|AafoE~(%sIc=Lc}$ybB&K}U1!u%rEJ(e<0AipUZESTPd~rs^SE(e^2okE2EXsE z7o>yAD$BeQz7;=@iq4s`K>Nf6$q5Ow%SAo@^7MwCUXgIIF8j^>g38Qf(0G2$bL;z# z?(XgD*yOxEWG?6o;#z;bTYY|wkagLcj>M~L6e2=}OjKb@{>fs<+2V2Rlxf`cB3={SBM0V`zGBu{mtRwSUC|(QC!e%s z*PD2~XUk{a*k9A@t;T6J>onKXl0&N#67Os(EeN~Xc-qLLX|8Vjqr9VP0WK29E8|&q zTQl9bEP23nf6Ih3ib6--=YQLyYG)EU<0Q`uPOk)pnA7=zcYGvtzZ;q4mF<>QRaG@) z$ba!L@yGf9fBe6E`{pEaR57%x`E+`ZqloL5@82Ku*Z*jilgc&utSw#~y!+kPs*BgJ zPcN!lq>=RP&CROYn-xVi>sqYc;Gnr`&%~?7(LEt?zb>de{QAkX{K+J*FM2z@KeC>P zcyrUK`Jns#P4x~-7RA|4bJn@e@A~b$%_k#i39YH=DeQ~R& z*2~HMb_e&>{!Vi6wR)P}bAMgz?k^Ub)6yADzpdQ8TRLvN`C2pm_=Sdba2Bit#)SX{w?x;)}#BwlelC zE#)%_PwAL>Y~hK2GuPiUx!!wXsn(9Fm!$<2rw+1Po>T3Z_tE-&cS3wR!*46*7hl}J zY%aNS=zzZ9g|~cOAG~=~Pv^^BY?|5?Wj;4Uo}EwTf^x}vs^nRsG~=KlKe;_ZoI)AikN;=h@n`pGoq zrH%LJz=JU*3sx6eWlf6{-kcolv`q7&=^jVPYU}13_azUo&M%Vl4*nb!X`;@S?$ALpofB6YSKN~HGHysTUU9zo)W1T@{hw?b&+osu#n)P2Ze5Pk{X@}LW4*6L z^!?haar>jVg?~}`GWYskG6xVO(=X_n3w(dy=OZ;2W z`AshhUasSIFc{xWN3FFN^ou^UP#6I~eu+x0}g@7L8R8I9iK8eoe5ctt(#f zk)zcqQ_{?5rjaXq!AYI^cJ26J*=#nUl}(KcuT0!&^``E@0mi>N$*aT;UXLxGTPIdv zl9ylfckgE&Nl}T(7pMAd6Bd5sY2LOoWc92x;mKEeMNYmbpY+CxnYFm$k$Z}Y0w=>m znK`#EZ2#eB5WbV?AJ4;kr?&l-O#1KYdhJc6Xy4`CJX0q!UTplATJBsnRZ~Y{q2zS& zol)UuPyBnTHSc{y@_$g@(qYTZ5Z38FGrL#)oW8nEfM=0|;1mhJD(4?RoEVn>KE!b{ zhI4t_nIpeU_Ff39|IVWNL;Xx!^1W3r{LGl;cj=t|wR2m@rAJ4*4QqdW5!~)B;wtNr z^^YN#mHFk4gp*&|SO2ZPzAkpxE32u$PHgJw>f*Bb^WpG{RjaxR7uY`PzrSG9{@?F* zZ>;+IY7W<~iyInu_OQ-*BYl$f$7!?Q(`P*NK6t76gRNFW@T|%CU6!^JVpB7jFD!hL z^k4P5@)ZmJ-YrVgEjCAa4*d?}Y$)NJ7KSS=~x^g>|eH((pIv3W=(oA2?d@TN>W=EO2i$Md2#clb6>f+26cZ8ebc~?#g ze$1z<7qgFjHiMvNo4E>e@j9kA>uwmhE6Ygd8eV&Jbs5u<95ZRV-#5>{V$g^c3)n2R z@9($Uf${P4!!j&%dm`-a8f@9V{qci?&6?k*r#-bvKPO}J>&4;^6*d!6Eg$Y)$r0nV zlFuf8|KGBjkKOS{lKXAjRdNlhHoA$DtMkw7KFsic&&s;s&J`02&P{q_Q72bo z8*?*b#bU8lolTvOIzI7VJMZ{^&+Em>Yd6(z>wBzm_v@shsRDPO&p%r&wls?;A;59^ z+s2vU2kf(_>V2+cyEWT8VFv#-n*Vory`@~s2SJ&VD#>nR55#fxy zJh{T?l*qQbdB>UgZ5rC;syG^wPX0ZcUnd+MUt4Gsz@#HPHd zKFz>1b=!CSeasUJ&mKGR-g16^SknJ96ZX%XYnN`V!G1PO(K3~hGjOI()32%969rix|^xsv8iHR+~MbY4QmVkTbrf6AK z?iIG%%iqV9l$Nf1;+FO1nE3u5t~HOP?|Zy>VG;RLZ#s9s-7gKfsuzkJO%o?|`C- zam@SZ5^JT$v##!0biTr_QnIg@eac0H6Gq9I^WN$^ys;6CUbb1}ulIYlIF zQ2ISRzF>Ox%~UqY-*t-|7AJE`x;x=7$O-L3dlZq=jEby&b{K>)d#7jm4_NcdKmW=PIg?b z*S;g4nPHiAzue0ka+XCbxw*M3)~@wEnah*RGbQLw>Gjx%9R-U2zAU#-{QK+cuF&@n zLSkckw`N~|G%Y&s;FiqGB?~NNen0VXE`MhdAf18gj>n6#r)0N_Q zGH3C|je_z2e_b!UTY4R2PQ~}T<)z<^I!}G6u$f_BZ?|suJ1d>2Egt1}&PrUq`dq5{ zcW-_TbJ=cL{r!J7#jTH#4>~`^#>jcafiGq^Eo0UQ$toTw;I4c0ThO0(&fMc)WlnJX zPFeB#ukm^&?Uf#aEBNOAnLPcVd3NcR%UAQyU);t%Z*Tsq3H>UW`n@ax+n)Bni2I%~ z#c_$q!?v9tw%+49|Lu9{bpsXm&+AV7OPzO9+vMtc!_J#5WjiBWEU#4b@R{#Qi|hS- zPe3KIX$70f`Cm6A56HjV%W%BCzTxeSFaa_7>tc%X4_>zwe3X#+ZLVaJFYCme$B@&v zB>m$i4;H61nZL!?7yh{s#<7s`sH_vy;?|O5zk1E@Ib>&R=a}8z&~S{S3bg9_eckun zKkhuYYX{A_U0CQ`HD$uDUsY%3*-Go`>aJL`rYA9_joIh+_I&ry(5n*|3@+;=SpEHa zuljxB<72%MTeCt>eZ3%~?LCPlP{c6*p3Rxr=KSC9*W35WST-de?_0Qev+%+Ij=b&C zQ>RYN$jLddFDPFLlVfa5Z;-i*UGVz&~$twCL)nt)Cg%WWZs$;ahFs7hd799%J=Vc-R}N5=()t#uM7SxPIsKK#9)@E&b+OE-ahAF zSn`|uMSNX9lR~KFyWLN$I_4gKXtUF~FnY3!a!|_uPsjQCO26szF)Z6$kvi$FH1CQl z_a-dYb6t@+?~;b&nYo4SQRyF__*t0$6VIq$&gJ8IhVkKzqfL!Jsvi7$VcGGVPodzd z_<>Vd?V*_|$|tAta-56koOE~n%hzW!A`X0gef{yi-|w80lasR+W`qPRH1zN7?F9u< zulYTTCrx$|J5;>#_kI;SH^;L1eEq-A%LIiwBMyM3RAyM0>t$tST{23$crGgIT?%L+ zNX5q_owz*}FAT%aOLrwb`a55c#qP(0=7OCu74LRFzf|;ja<0M(Nyep0#!3@CuIcWd z+}afUYThw(UyU!DbCg-?U+OS~T=rY?MJ{-e`q%OXH>L@$)jbD3TtDx+WDVc9eV?71 zu9w`f=lx@-wJ81La#3^LIsBaeCQVy;DvqydU+es)n5gW6pNqa!-t2p>_-$UO`Qe-& ze;B5`spg(|E0e=7a#hxcREG_T2`85;md$IjxWMVQ;^CR+2G*Yi<;*3#-^8z*vDeAu zPe){Z@x=!@?*AX03v!9d50cqlJgxded5Uq&`oAn&_6yGmsQu0z8Fb*@0(ritdw8D9 zY`Z-Fz~Alijo;?<&PzR0$aOX@w_x>zd7&>KRD-7YzuinPRhW2chLBTUa1H+9lgyPZ>zODcye;`kC*=StC(+>@HlBKHLN|}mLRp| zcas7Sw^8rcAAg?P_ls(W^~{)fddfD3}dy%G_tbCRxq`YkZ)!Xl$GA(r^^UvIZd z+kv&aYAkmMs=C|DY>WT$-eKzFmeU_{ejB&^>%KT)@f^o>D~=zyw0lageEP1#FBMg=^)ZhQ@@9sr`a0 ziWr=}XHHr3U$W!8^y5Ukbe#lO+os}mlAmh)t&;y<-~Uha_O@K_dZVCK%)*b8)*Gfb zDX7Gr=>2+ob2`6V{hz`+1&4Vv^78y{dZ^6bx8UEu@B1H%@Bh)tx9?Kwnl1Y-OI%I) zJAKvGEf>!}I4)nmMtXJ6l75NgWg@qZ%|9ca;FqQdDk3gJzMDb#;Wzw-1^>4 zeVTj=j%jrL6@U2i#ZC?DmHXso?UMPoGn+TTtTL+Ld2Phs7vBqCGXLie|GWPEqf_f^ zxOqQ|FV4KUbVlvrR-GHmDZJT8*4>s(5{_xI+|4lAU zRzJL#+aB5QSlHU{z}I*G#qUmiCc)B{7Q?r5jo(%dwZ*d{?B?_T|0w^zao)Unii`7j zj$Y&WC%LZX?M%>)hxmU_;|rvXoss-*xv1PkeRKki~UTO<(;6!MX1I3)8B&%l7|ppAr(5 z{PS=8u}AfLu##os9An~r@{THI%=XlCu%l6%_>WWtL# zZ+ZfsFXw($sWnlxOY`+--O|Go9^T)~U$WrMi{F7hi){}}&N$r5J^gO~y_?sa$|^4X zdN<>2XTn{ck~K99;$gNu9;usO&G(-!KMjC>vs1(@!=>p3w~>G$;CXQ$odu@7QuNRumh%REW@wc`1>x#Hi>Z+kC$qc7jP zQrt?%dST-!|G4IYhclScibXg1yxn%;%W1)tGkFTka%@g7eAe*o`!e6zAJ*pAa?hPR zch^BjGo3t6MbH$!T;&tNlG4(L8;{F52M15ii%4ocdh5ily`N5L|2Ss8uhHM`r%U+V zwA&qy$;Y<*`*k}0UlVAj!i!h0yne?ly4jj|t2B(4ucPysciHXPx6Fg<9_ZevKDR=O zTkdX4FT6uwbEtBBF09}%@5~R z%j&JGk`Q0_Q|iy;X$(!iTfc>-O#J;}cY*xc3o}_2b!p%7Qdt{Qu7!c7g<&Yml^<)piMa9- zj=l-}+hXf4i?bg}`6?z^x%+CwWY8$%yXz14KT`~Ccyhoff_3(uB{B;m!w+67bh5wg zG+|ft443a_xwpV+64W4%ijFpp&fU6ZZS?j>ACJqsySuaR`*Bo1>8h5hOt6vZD#N}v z8KH;y+LK@WoaI(8`G0TvdAXXuuj7xu-G0CCcHVB@ty{O=oXeE8vz<@&5GY0WN}Io` zwTSvKUE|FBnIWGJ*L`c6F_*R3Gw^}YDOdB!-OD%bb>6u_u(@`{y>B|_;y=0?q|a=O z?B3LCtrL!T+%bX=951xMh`QeQ5`Gm{M ze0O}imAx_VuGN*RS5s4e?B2cmyJ6ksZ4K4s35hxvZ2Ix!n~rI$8I{0`IY?<{kc^~g%UV{~@Tk_|JjZ4opDW;0Saf=KmE`ezwW}B0+#hr1n}${;;?H-j>Dg{Y(sZ^33Jx zemrc^ia#dt>({S>UtcokSQfLr-}Bk;(yy%d>a&j9+S-B&q&|83zU1S553j5Y-cj*U ziH(hIilyf1#YQ_MV$yy0*8cjE`R9B6fAhH7uc2q=+sm&GUw`b+&(B{y&1J5`k0pm8?tI?*(nqX>sX4 znsHw0wcQGP)6#XnFYKOh>X`Bsllc1ePcEoUk*SQ2k1*PrmANkQKx)Odf0998Q%;Bq zGbp_(eZsf>BWl|4%OAW`M&kZTDKKHKc^_cqa?zW%JX9Br;XVSZ{FP8Y*GD9 z=i2)C{#C2AKz+R8XJ-zA4)h2QXJ3Aqv;8n*ph)R-{aNpic&Ic5Xt2yb-ws-Hd48Vl zk0+D;LFq|$PG-Vgj&(v;XA3Y*KfRRMaQ}V&{rCIt-HQXQ&VF)oa@GCv(o#hkzSn+B z+OwW#nDsY0Ff=+a)a{oCt)rf4oDMPtN|Lfd>&l_jiOg=2Yw71|(yo2ZQz#Ufo z2QS{{QgF zf7iQDy?*1_3zJ_Gt{10NpAyrFXjtk!ebLUHlD@va9g8?>YinP;d*@bNZQUnlTXn4V zXsK&pOX=%t4}W}o{Nlxn8QcEe{I?I(1&-Rn0a~i~>-X>UJ^OzAxl?p&#h2|)1}9ju z58lW(H8su1&UVhu)|QfzGDtrsld}0HOO^k8yWYM&zLJs>pG@1?nirBcdd-@cW}*i;C#^U2O)*s@FP zYRv>kiRWIs_BYroZ}sgs%yIKy@ToQIn>F9XY~y3*zP51LYk^I*%e8`j6f%A|rl1;r zyW!qc@x}EY*?7*!w#3|xdGdPJvifI-nNRS{al3N2@z&#NgY^HCS7@I4Y;I}lZMVwx zz2)tR=UrCVZj`@xviZc9a@9>Nlb`6^JAG$=5_i)>#w&7_PkU_7Wimc^vj2Nbk#tcn z_k|xP>=k4tZ;sk=snmb#_g5T$Jh&ZvUH;AD__IQSA+#xW<@Kl6;<^?}|L0c@5Sf#8 zd`|t(^&GqVm^SZl^KRWUvray8iZR(db4>mR*+d8#|&zJvR_buD{85`G6b?_Bn z34W)qy>;EAl;cYegdLn3wWDs=NyFgSqoq@lE(WtU9{nV8Z2hJ3+@krHe*Ms{JI47X zWCC~5vY_yA^VO#1t2Sy?GR{r--*vj{i~b$!P=?TtrUxazPrV+u)ysO`(L>>Rb1M@b z%`;BoE2?E;Tjh!CW_|Apd6X6891V<`5>|)@){8H?oWF3{>c2b%vkkN^pNQf5 zAd--;r4hnf&l>sIN6ay=!slOS?IfnkAV&X7_v|MJgqPJl5nA6L^7eM{LoPRgq$jzL z7k=5bw*KHr=fxkUZ;9Wzdi#{R^n16OKYTHK@_c>EH=#6x4KL@excS?p$-;b^?EX*B z&412YDN?kuRP?^}&v{H2ME>uUaPZ1Z*3y{8m8A8ydh6%hO*&JrMaKABp4^r$wfyG1 z!kyeVN{V=Sc&6yM$C&L=eOculzd(Jzv+;rWh5uf@yO{cwW7)*LkG|G9#V&4``qH-1 za<97A_9e%H`x7_b-YK!^v1i{dS4zC-3WrLpuBR&b-wWd8tY2x!~6QK?c>KbMrUcG1`+O%y#~! z*-5L!w1t-vkImOh-1x;c>bg_#yB$lmHoU%*9KsQ;AuiMG`QK||{;KK{jm0YyOeQY$ zT79`9_VKiB794Kp?f9LJI4*k;|1jUNDWx^pqv@HDmJ5`eO128!S=X&-;8uBi zN9kHiAx5{P-+HWda~KTC$68J`^lhKvwP~vVA~wad7jVhBtt)}d@Qkj%WZ>?2X$1ljPw|;-#Gr} z#eSIy@{R(}yZ)KA)pI$X`QR|+ZPxS;iJq_L*Dk&DuVoecqF+_Vzx|6X(0#OR<7bi5 z!}1LYJLDgpY!*(r^l?$TpNvkIS>NRf1=W3$i`)0~>qK=Q+&aBa+r624THmgcliG%k zD@r)#aIsx}v6*W}2Ikn~{SpJ4h7F%RtmaC*axZzZ^<%J)SIg0w(?UG!cH1z1xUpc- zg@q+58nwae60Qoon05N-75Ao9>G_jIPq<2y-uR0S{%(__rVFgSS%2{B z3Da$Ujr)t%aHvgfR&iY^%yLPlzpbrpmA|><|1!>Hw%ogx@b5G52|8h7ZhpS1R&8?N zuRIe|(}l~HrG?F0{`#}eTalFc*5&Ucb63pS-WoHjP-gMcrK%@aN9Ns5lvuQMX{yts zFIh#`&doN@KPBAiv({4U*|IMU#+T*2wd`7!vefy^u(o2=O#fJ)Ynjjf|FVDayPNS!#h(-mYy$o$ zO#0jYaZVaf&b~aKWf9$?7fg1%j5y${b7|G{(&*@DPlf3xQzo2DnY4N4{f~X+54yD1 zN&F2vnI`O@q4DM9|5zT|*8SqA`edy?y!5Y^Vwf~J(2KFzNw)sa@%o;**5yil$#*KB z&*hX5y)}y`I{xRW@C{j4wHSoY+pSx>*0s3!v*ahyU&cG{J}T67$dEa{&(R( zUbl2kNVGj{+5h_AiA7)iWpCUJT6MEe_$)`Fru_e~brU{b`g$UF*Rl;I60%Pcc5Huj zr*7&$IlgbpOjj)aw%e!W&Z4a^qPK`0{yqQboaOb6ZO7|*Z2l$ltlh=oyjt(jhf7~i zoR4N>dEEWufMxiCZ(G|1=UUk$^SyidD^V*yZfVg{&G$Z~FaNE*vM+QKTgv80(3BBq zN7skN@_#dqy>@qVQ;SIW_ci{%>Ce3dC3l`&_Eh`-y<{ib^D{G>r%e-M@VKSfHsR)^ z#`ANn%{MaDex7~br|z_WvE1t>R_;mn+uGVD-G6>=Zuea4@<;9Ve;%@MXr2i1=!mD#13{h2wYXTza``9(1hD!lg@D^Y{H! z1C7c&dzLoGrcwxWn9#E`Gn=LJ_Xvu|6flAY5!>3>K*!hI*j1|SH_xW?-MhS)x}Q%$ z;e7A=zV8p$Y(95ro^7>(kx|pu?CXoRZWRTM?tqSU0_^~JKDS&B)OUUN?w#a(XPM(S zHl=b`RaJesh-m?hb^DaX>Mlc zSL#yAxw}i$y-&umw$?Up-_Nv|(yO5-o`25Bm$#LDe97Bg`Qz?gyDr?g(E&pR~J+9uoX1z*(WQ_ z>tp@<&1TTnxCbf$k8}!io{6jZc=X2uc6)F?_3+`t8Ch9}((OJ=u8G{trmL%) zk(ucj9W9-=|8JR$bs5j=>+3<|Y;JCD8**=(efjbw;p(bT&?#K^s$T1Y;{WT{ub`0q z_V)I4hC5Tk<2wKStE+jUEPwFZ+uMRHjG%sK?eA}@@`~DFYYxbk-)USMy?xQ{-O`}> zGQFKogwD*h7Qekc|2VJtorZ}M1!b&CJXU`_uckev`;kp z_V&>|4-TGquw$un`Qx1nr&tU3{p)^w@o)W19kz4z=DYItNHaf=v)t7%zmEIs?tkL5 z{{5BCsCw|!p1 zHfwJ6yPe?RyL-1c`FLOA?{9B+{Cc%|W9{!UPy%8206JR4y8N9>c(}NjZd40sx^Ktd zZ?`Yrzu*7sS5?iA!}7;wnPz`D>0c-GzVdwag^L#(zrMcyc-ibcuO}y;7J))rG(4v9 z+&RA|MV2w;cS|ESBplpw?d+lZO$r`s?8@&|s(<=v13E?vRCNT3B%YgN`QwrJ{*Lm! z*(LQw&d$tb@9uOea0G;hw_Cs8BfNI)+81x$xR}j83ff8j^=f$X<72%H4d3@XxBYS1 z{_o`@Nnh`M-zT1%n+u92P)-GH?7ZZyf7DexmW2Vd5eGCx$8bP*`<id&ay$fEi-LBN7v}Mbd2e-1<`zpK^p8tbonqKUzEgu{CYZ%_X zef#3gn@4T3*mrFq%zgMqce*{(TTeoiQi~+@(vomv6 zR#w69x7!!5T*-MeM@;_rjpJ%D-#7Nx@~mCE)}r>8$)}$-e)DWB9jB>!PkYd3{mvma zHa5vq*JeHF7??nj#FP{kkfurLrc+;qO6It7JEi~KHGh9_v6bFadmR9{(ta4QBtlT^TzS)yW;_y zzkBkmz0tJKJKy<#<#k1?Us6pL{Wc8&&C%w*=4<=Rmh5P{TqU|UwkJiFHXjZ! zN9?UKUAO;V6=>6^{o`Gt+F=XUuH^+yJ5N0S{NwBR|5CQLwh^1te3^J+V`IUii?O@Q z7#aS(d;gDb|KGRyh4*W}GfLbo-d^@LYRmTRj}NlTACdp}f!)O1{PDWo?+%@>`)16; z%bS>y!2ueQ{PpYCht2c<@-Tp!FOR#l*B#KW``E2{cV+O@b?fv%$+_^TC}?k6`TpOr z3@pSw@q1op7$Nql5-*3?eIxocL|DVq* zRGO|%dU|?e=4G{--?#6(<>%|??Rdzx=Y8$_!^Y=rn$Ml{ zD=95qxO1oE>+9=}-z~r2d+?y+mv7&aetvq&;P!pDtVIC>=p>mr4Ua&@()!xB*%fcM zUjOjD{{QzEZ{GMUNL^JY_N(~O5zar4#P=V#xY+&U1!sQn3Lb-3dAj?yuV2sK+}wO) zZ?$>dugmivfsXf*&fnAMJKOBx?E8Pz{N`G<&YC5~!^`_{)#`Ol>FMhGKF@v6z;JDS z{QNinZ7M&de9|$?yVK#LHu+2P%S%f$^7GxJqowOUO`f0d{@&glFPF{!@Ol1!8TWp< zqjz=|gO+52Fob<1ov?p9VwnT7V z-LID+*OkQ`jy(Tdw{%yXH=Bd#sT8-z?e-~X7+xj6m@8lI9&Q;440y#PQ4t~2} zdD~!9hAb$luDJX6#*EH%maV_%yL~&cS|VyI>&|IQJN#s46{=`8ipg$Bm2%i>cU$E4 z?6vcBqqim8+>{DB4-gcapi(7$ZmHO}x3|q7?m8}CFC%T1bD(_RXW2cV*|D?vbi*XlN2a(ZwmCtXZD=7z4Wu0`#yl26~&=T$ICoApE;Zf|S*aHsgZ z>i(}^zNk!Fw`-Txk;0zo@pY2h@0Lk}b{Bw-AFwE3kT%advMO}-haDX#Tz#|K<%83T2DV$Ub%i<>i;QTNXb{ zczCFllfieX02d>FX=y2VEMCrbmcykFA3jKm9X=!>_V4$@cKKsXtlZ#g0+eA3zr47} zIl(sno=r)4x%wyD?{|tV-tYOW)>9~R{KxeApW@(H{l4$JtXPU%l)%L$Z{Uo$=Gz?hBv$?2n&VR667HmH!SFH@Yo21o^%$ zde`edN!XP6NHU}1%gE(9o4>u>P!g8S>hroedDrWxsHlR2tl|n?N;S`n=X)+v-kyKo zj*;Q8fs4OC|GT~4%+=*qS9eO+S8~gRf(!Ti}!(9ES~j*0{2|#!XmiVYJyo zV4;BG?`HWw4BzjT%S%Z~UATRF_8+sUqB&|u4R^jj`pJi_y{YDBja}mg=XSn@>(=qz z-j;j#U^6?YL8u$OZNbWwod19H|L@?|-y_g(|Igyx&gXI_W@d|)FHa9+4ePk38)F>V zmQvgMI7KJ@b-v8;bQe`|cSiB+!8Z4{Zr$3kh-3fnyYDyD{44^kj0DAmX>QSk6Hit= zVKR`lD&dI#b!qyB%*$#nfi1bWw-{1Va&!!#I=NL<^ zP&n~b`ns8#^kzx#NE@?fdt2J*df;k(1-I?)3A|5!-Sk*X{e21!}>b zxBHzVbRvK!V)FMuQIVX7@d7LoQc_OY+1h%$-xx6*cy)EPp@Biey?b#fn5yH#oM>LL1%?(hp%(7o9`YSeY@pv&d~`$8`?yt*fGf1*U9AO=APVoJ*L=~NqF*8 z-8=KoKUe>=E&smVp1*JNk55!~|L|({`bT>{pF8~Fg8^uY>(LR;C!Z@pJLy4FTi@># zfBd$6zwJu>E~S#vQpLWVM z++Ft8$=8<`)G=AOP|+oD3X7Pp-1|p%vBhUiPuA;4Y+z{Tm-kz+_JPs;ZMo86Yol8K z{ri_v!~H%ZaSf=fQ{;bgGkt!qZS}V~jO&kPHiFXf8{Vs&m6sTL8s&}VXWkS$;H4w= zG|Hao$cgi@9e1X^KHg|xBK^~P;hCAMk8p*YdLPADP{JyEUs{4iBC>|hZ~ycC3m#6a zcX<2Ged`XJ*p1&--r2o;(K#=j#+x}};c=BuS*A-cfVK<8#>Q4Wx4z#AitA44%^T*w z`}KOgdwspV(M+DYABW{1&B|Wq8MMMDY{Su=U%7JG92*WEbj-Q6g;PAPLJ>5kAOG*u zbcTjszp6}3OdkCE{r>p;zc=TDDo01N*+(BdP^kOREYBcuH@fWi+wG4Zw#(ZUC(4|b zjrj53)YKGo3>&D!0y-Y-5NP7^-@kt@%T_*Fy?#9?dJEp%FuYU!e(#Uj`+rJXR zajAYSr+dE~=p>9^zkdr`syi1a%G7_Jeg6R{Vb}eA9k2fT8rO!94Jm1xZ?YtHt)0y} zJxze6;>E&ta4Y`)zi-<={(8M$dGg5x>(}$&-kyKF^7-6$P@6_VQu5&Xy06-x1wuFW z*VkX#&n{mhkbP~5}oVCz;|x6O#`0Ee^Xe^bAyA0LBjyMc3H_-m2m7Xe}8O|Yd5G*FRbpD@b%SI zP`D*2M(wRKy>5a|l{6;f*K-=W5T?>=3C}0SW zEfu}CF19G29?)RYlarG> zPjA~03fdA0YCh)X>fXA28zd`ZRiaV3k6T>t2x#cxxMA7*dvljW+}xDP4Lbhv+3b9^ zXzoQChgOBI-cbHN?n#lQPW(QZzkmNmY|Rptl9v8>#`wHSHGg(i7N{alcz0(fXg%-5 zvuTB|u4sPw`Ze+Csi_vC+Nt(F!=4W;jn{Ub~yZZZk z4;}faaA799?OlP0Q>Mb_e$FfL*E}dO*}J&dc;DBx`41n<|NqhQH~MI)@4cS*oQJzX zZR=O7*ZVOnTA89dMSJ}o@Gupq8NX=RGB(hVI zcrLg5s`=+#`ToP%>-V<3UcXY8&xX#eNW1ilonhv(Wy|*Kh`$PPNXYv=Un#CC zZ%-w76=Pg9ZO3J}g-uu)IX^npx6|LvuS`M;{ZiU{5=y#xaRu;+;LI zpw6Pvaz5o(c6MSC#&&AEbQ0|%e&={F#WJkYw4c+}XFU7Q_eaWCKmGjEQX4b*{I$8S z*4%aa@~m5bU&q9Wf-Zqm8vF`d@(+4N>Ui7DKfZeXzF85cmrbfJy8ZU;+l<`YqrdO} zugkf&N3!4cn}l4|i-k{SC0)?I*B}1k^^?cP)wT!Mo0p9%-enN(o*loUJLYmInLA69OJ+id z#*>=ULSO!z+*@>PA%|1*!n!N=zxZc-eswr`THqP3#-N82)Ei%HWLZ`@Uzh9Rmexf< zt+SVzcGX{xp04?NKHurNA+P8AuDfrn)38dX`f{wb;>*w0_RKmFntcD7g4-ur{!m(U zy{ag>#Q5$bMvOQ3Vr>zzv_pUzjyS^hUh^2ftt)pNS6^tUmD zZQ=;$YHZz8|Fd{|;*+-jb66xLSP$IuOX1tsai;OP;Jh2`U&@qTy!PsA)Mf|>cv>-q zt8wyosbi(RC(dWO-Pyyjvo$?Ac5fo7IMY0NlFQPUld+gb)8u_UGQDC*u#%|IoNgyK2gv8z|Ej4sl)(FMH!&@xe9an@#J38+j~+|9Bi+CDhWNC|Q12vQ3SA_ukOpR{zF^ zDFW$s+y2Z+>(RO0ac32`;id}NPis%7%XMElR(VFq!l>n0{JrKk(fMj(_qH^)HOl{U zSfC=Y=2~nD_n(_Am3n_-&7T;)HUT!qM>}&R_B~yF;E!lj%znq; z*&O_P8_qO}3&_(BLf^X}BPTVwXJ_`POITs6zXf3Y0>`}!7qztZxz^zlNCjoY^9 zY1QeUiVE%7eDb|A_c^D$kCqZ~pUryK>~Yw7?Z}<~KjQ;0|2x%U+f%~od?bIH^MWi1 zlbK?NO#aMllZ*O)#!+r;HsXAL!<&{nIC5y!GPLL|_DU)T-f9v|J z^|#==dcKDz4?mvHmRQvHwxXbQm&XE=zDDh*-#x9_jtdr?;gv3Z<9uZ!zv+6ro{6rn z4QkFkm9YCQbfmQRWw{l{h5b+WuJBycblztcFT>Ve-^Itz@bWC!wvqGj-&zSt8Hv?O zE;7%9Z4a%zv#VrFV5W8E*~6=z7tVBdUdEYsS=Gmkv)W3mW~${CpLw(28a;U_kw3M; z{m13qbuW6h^m*;H$Yq^cecRW;`SXo^Tex1Idw%Tu5k`minl0^dPS1|A3(D289=z~l zVo2c(#!o*x*IkPI72>u3@(#DF?-`R6<~z%LDi8B`nK0nT=%Fz(~_Qak7`$hkM z*e!bg&bi_oIn%Fsu8E4K6S8 zR;Pr2yip;-6xU?I|HLg|^Y6ebZ|X!2YwI7laO(uXnk7nqTdp z>EzP~US5`X_g;E$-2(Zy=k0qBzPr3)?(LYM|2f61;Z^-z_r0bDPgUJeVOYe-61t0_ zG}aXl{Rssiipa>dW54s+bE z5ps-wE^$HRO-yq2@1T&VZM&P6%N*WlsMQlK!<@*F!vDtU+X1~Eov7}GTc; zlJ&H1a)JGZhgw(OR5CquD4!&=E8^UWb$mB1zcMuJdKPB${rvxidwtsrzW)C<{ZxaW zk<6?c{25YArS(0YfhA_@&C@bOx3C)IZWLR&?cPf!m&wWcH^0u_aKI<a*6|-} zcH>et&zEewmUr~QvvQ?%`7=NM^!d*7TK=!#tNH)qJ+G8*)V5ePySeRW?hC6LhT`cu z#}B;JJF-*IWQ(rT^@V>`Py2^&*dx=hZa(*!$qqltFPEF-Os1&L5(?O-eP*E;lUy z^*u1*xTJdj6RGFP8ISpR*6!!}xr}vj{TXq;FwS(A10TK=n*6_A@BHjbbf>BWLzB~@ zw@fu+dl#Hxd|}Sw#pW10jbE)<&0y84^Ck}rpU>y{!Q9}JocuU`)v52|%p8v-GNKyp z^z}3Mu1$V-P;f!;BaSlYx_0P_K#84H@jX1^PZZ+doJ2GIU4XaO@6JrGZQE5 zc*(60!P9b(r_piS!G$UuSAO;_=Pc5j!!jvM*6P>c1O2ZUPj6{GANFH&VVrl{{+nJx ztZSH!*N`|$to zf~pR#f+-x0nND;3B%XLG{8BvmZBe#P&Y7Rnul>$f(l~XkywYr^`jW=LjVq4pc2C^@ z?tJ5|s-AhS*1bX2Ka`C4|H~c%Ip*VD;j$jl1Q*jgo=py#VTTwz&iP2P7J}w3zFp`( zAy>h7;`xO6+hsa7T{aiH%HY^Bi}}2tMg39r1)DSN7nE>>a5me`XIZ43G$qXOZ?Ya^ zQOVA_((~rB*H`V@r^TT2bl#s-d8TVIHij>YKiaDE_cz^t|6lOoMe}2^dtE;yO5eH3 z(E0S9^}|RO#Ri6l4(3^WcKvS_J{L^ibYkneIbt7*&vH-9t(Tm6FPNce62pXo7ji7C zn6_`S_ue3EecqVM0!x$<3VEvUMH>DRQ`(HhFO;`Tk=id|6z~#u= z`Zsp2yMWy<{}VPpwsY|B?MX;k!SUzRY5ug;q5(!M=ljZ!9uPg3;J~AaB|90fTmIJRAoI9#=;nG9@=P!l#*+z3dJ}zwk z=HyTHRNh&iR3>Z@`~1grKEt#*#`C_Za=7>BRR5}1`h1|?eaCl67Uky2-+s(&xAtsU zF7#~URpNZy4$a4RVwjw*RntXo1PC z)`s_p`iILaJ1T@acI|&%qh7=NXTj_6vtKXEv4&f+^!>}PJ1ehv@7wXk(-s)8xU~t` z)Y}{J|0z$2tCTnxaR12TTdVFoPG@>o;2|-24~7aZzbf}%iruf) zwASZrz2>_6R~Q9cr!BDH5RCsVxuEpti~08}WF9uxcb~bu-{r#fnKG_zh7~i`s-6^h zu~~b^kMAE7CK?L#d_FPnM*pn6{z@`$4xZTa)Zwhmljvy*#j9j5o@_q(`;pd#pR+h_ z9sN_kOLVm!Yu2q&&(#YeI~KkUf41XA)x67039j9R7HkdTZ(V9WRyRKWEok>+JBR#F z!$ZMu7c;4O*_*MIZEIQ-68@p(|FMcI28VbKO>|7@-)AOe$fL0RL(Y?^X$#8EPv&T6 zckAy^zF^7TsMowe@4=)hA&x{p`-tCCKOC>GzqOHTnogw9@?8SwbDjUq@>j4Z6gVjV zkG<*O#^l?FcqW_=-E;grJI9u*p*G2TTV2j4|F_)pBj!tNk#<)6f7@q!e#v+K^`E32 zVI=d5rSVci!1JHW*U2+Kw=(duP(AWwZzkiSl-Ki3uCEtj&?#r^n=P)mVrKJ#SUDct#+G1i-FR@hMn=(zyA!Jqa{J}22{9QowgdWVuv0!?>5NLDh|GFizh z82ENv=4}p|?6`W za(uBiJ@aONull#J;&l$y{vWEeWO!pm(f4I-! zD(g-T7WeavdT-CfO>JITtax4YwTYJH{zYLY~K~%8q3uT2ZJ8^iM|NEy+3HZIcvR|{VItc3*Vc|X0t7>`?}YD=^f!! zIX+B(XH_t&MEop?W(u)&mVS6fG`#=S&&ABgO7tHr^J6q*lv<{6eu>eve-EFZF3ex{ zY??}bs?__?6}tjMn-fkYttbxOagtM0Q`&ZIZI<|7le-7)ni5R^UfUSv;lYwCbk1j2 z#mvw8wST>?=U1tkSSBtN-o~rH>4*t~kc0mxCjG(~?@IBI=+!yQjqaJU^X3dFRyMjAu23M7d5p^ZBRN5XZ{0Oz_A8VUEi=>nD9N zF*`V4+d#ci_ru>E=DX^yZV`UKlQ+p;Byi>GnvzjHPX z!Kbw?Ik!yd*AHLQTJrbQrK#IKH2b+}J)d_W<*`}t&X?2Y|7QGpJ$-Y~g}vjds5#CewW2Ci06aafSoz2{s^!?I5d zuV#JUbM( ztI#&ZreT@=uNX_|2=)XoCg;nq8{ek?{Wam!(jDH zs@|f<{;K2|!<1R<0iVLSI;*)$o3dJ&A2jgckOnVly{B`)eMu%0c7fjq|RJn71Z`~y|*&u<3YomLk zM_|OIgMmscVUOFsvi>PqFWT7nH7x!mAWty^ShLNbxulKuqfB(*j{H^kyH+<=Ll^u1e=}TtR#A`$*u(i&Z`NKyj zS5C&)X~CA5hRlQ0PnLx?Y}S=e-sUJ5yT9bG7yHXC+d^9}t(@wpXryj2*=09(dejZN&+Wiq97MOuBkV z?0dl0+6}tDw$J&Zzbg39j8lv&9zQ-HW-vKH)MVm|yHD7+uiUod{rXKptLh?`+HDr&92dek@5I4XlHK|&(|9|en_AFx;%g`y^uzuuYK|R!jv`sIT`9Eyd`E%3e8Su zny0U9y~fTlWgeT`ckz;_pZ`^!GE6aYFWK2L^ONh}_Jtt{kN558Vhku!k8O6)jL+oZ z+Iaug^D3zsD-Y=89x$27b}a12;#U88U)wd~cf4P(#gLM+VczSCAda=QyA%y{pFVJs zk_g?jB4Ek71M{)WsBL$xOUZ@b+PuZe6?!Yx0TPDc+g0kJu_3FX8X67F$-3EvL+jUnd!r< z%=@q8;PkV<|Ak!3p8fi|=-=F;zL27Ljg87ZJY~unM~;MV6j_nNQt+n4?|{jo#>-Of zQ{4~md?sYZSTyNC;B>}=Q{qC_K90TdJ=~B%h$%HzJ#o=*Imt5|38o4blAD&i`F&B6 zch0pxrK10Ky!ZdlUU=(k!TtF+)5Tt8^$2KuKbnxTVdv49MV}@}F|JXra1M>uTC?1Y zwfV*h|0QcVt?X`8UYQ*^cdc}Z^W0uTqZ?;jCfCKxSue1nC?>JmY1@hdKI-TG zELm^7Z&%CC_x@|;K73tazEWP}>NnLZcQuroQ=JyH=zC9B4A{QN?{)cA!2^2Jyc~?q zZdCg-likwufyPCL!?pF#9_sf!4&+|&UO?k7ck{%9|I{WwBt;>gRa5nnzFBZEN!~d_qkZZ=o16hhETNm)Z`#qVx zYgdK)r6_T)2Fu%u6J93HkUN%QzbdpttI58EX-e;f#8rbqEZiw>Gd2XvE9ud>xcsKCCKGtTB!iTFOv@6f8|C#Ra zLz|hQl>6KQ0b>D;yFo96SiJ6jS2z9P{9N*Y*6lQd4k?At519jwzu&b!aAh}V{nESA zUT+u_1I~KCw_>@qNJT|^V$pry&cFj#-#CXb&eG~{4YrKW6rHls?j~FPGR5AL^Ss}O zuXv>>!1Ogv{p1#X(?FB&f2XFK27R5l=`kZXYP_-&FC1N7!V|~;nnw}sRkiSg=f6E`RB9ZpQRiPm(*tH>Nl?! z&*w%UO6CirIqS;~$1^pUIVvbOpLJYt zc0z_$`vTAD`BCp#&ohPH7QgF$Nbuj2x;-o7l1t+kOM7tEi!v!FP7uhbUX(F;Lz+`! zNcFdD%MS~a&(FVdfIsxptS+W!bqml{NqeVg%*c$#eh@d z%ktkPyzE*$C)-DkG2Qw@sBvHB70=ZR_NssJXts}TvWxMsUC#B7fwgl1XJe7#g{7CB zRGvwENxdJxRAGgZPz0;Ys;tA;lpn@0*@S)$eifB2^snMlyH3WORd*MxU7PEr>Epr{ zUbVij+Q*&UyZe{#YpInN_g}q|yU9Ou%lc2X{>i-?R;~!q*cEi-22wKj>e7+rb z`=QOr;LCYV`SG152hOgOM?>^7BdSl;F0Zj*%UibXa#xO@^q-JuHs2*38+k2aTkP3t zXSDiEo%STN*nn;+O9KdjVDIF&kNCMg1t%64d0Llaf78cN*h#zyAiQj#mn0=B)nB z$XQ?YmG9ws+aKCXTg*z1v2vJHuFZYUcAKYBNa5m>efF{wRJMjN&oq0-KBc0n?@CA9 z{mXkj7((wqSU=^rbF|gc&#Uj6aa{R3)s4f1zcc9j-<@)QCT`oK=FhsZ^!yr=hRvE2 zH}eYapQO{OcR2niLxwPmk-LK8g_c(5Q}363`ny!tK#`H_@|2@jgB@3~T1dz4Hd`|} zQ(Cm**!sU8!bKT`m^d5l92R6fUC8|@d|BG1ay?Okc}%wc$a^kBz(>tEbKdg`XP3qz}*e{)AT5XH2r=Y;19GN=V)By_L<6 zZPAtmUR)xpEJR&cf85+7KjDM;@^9;AHCSo(IQ*EsmxWtQXGTH!*55@wchB247Oi_c z&%v@bA- z{@)Mjzm(fw#-$vHmpOjCNtJg zV#-=}huLE1j61?Be#gDz3@MgvcK>pH;iJgcbHdeLhwcoxEx@7lwE2YF&5~=5KR$E+ zyY%mc1}6hJ>=w)|@?v(pdO>aL4iOHgAIg6O|GjCqU(mC;;U%Bh_e+;#WBxsQ<@CWL zs%Xk@nbLU-kDLWMS{wvo-_P#5&sqO$q2H-?p@-{tSvf^pIdZ75%-Rt2W5@gTm$GYZ zSXIv2?U*BRtNniIq4}Dz3QwaB#aorOn3cAHf^~<2_l=zSW&$hPgl;z)yj2hgexUx+ zx#Pp~`ng+0|CO9C6@SRDk<9-<(!9t&Vb%8n{{=U*bGYto$h|*bSH0mykk=i4j~~i^ zPMV*avCCilPbh0ci-Xewy^77e`&3+i%&J>n;ygP$j3rc#b>3~?ADgdE_5R_#e%^&8 z6H3@m&zi98&cUENAy%SJQE!(#6k{5~zdsLh+3>beVb{G{@dp>veoS7_AJb+p9kahx=*)b3d%we~&gBKW zzIznh^(^`NYR|E4Wg#)ki~C-zINg$DvhqgGZ-&hW-{x5VF}yDSFrSHG+13-F47bj4 zfl9y@L6%VFIlYbwyF_MnXU@!FFh8jmdr1Caz83>1C#X8McVG8tNtvs#Lh8m6adBqH zB@Utw`#-q<(B9t{&?F!v$Ml`$R8&ID9<{eIbxUKEEg6n1R}cticASwj_k;V7&BFiA zF*rCWC|+>mn6l`MPmHoELyM!rOSVQ2K9-A|K0-RpncJLyDF5+%w3buv0jK>1S)F%s zyPCgVNquapweGT|c*(WtVsB=yIeq2$Z0`aMP6f{TG>3EPkh1%m^MXu`2lpJ`{SM~M zw_|Nw5wfhs{?L4p8I$XbI@ZjMr&$#m@e*5_{~r^X+h72 z>s&2wHaubC3$B-=Yf&fuk5s;641xR_37HGAxx@8K`!Bnf!@{J#8e&XTw6S6EXo zefuT!kE34gHD{@*8^;%ECSMh|t)`PK-fo;E#qdZ__oz{$9>{uqVeJJKM_I)S zxd$doF)ZTdSSohctA+CpXMKzPq5D2xTg=K&9C4od?P^@j-u0Y|Pe(4uy?=iCx7`Ph zoPV{@KRqeq_IGBGhg$4SKbSvduT&K~V6y*NCZ|dE(vKH~B3_kFy1aeIuJ`BDxEG$} zuz$yH!k(k{O6iZ_ze_7tYcZ&>{99-J%;L5=&#%Vv$!e#9M&`QRJT+ERc5%kdlkp_+ckUxmwKL zT?g0B`d0E>b;>UJ3*tYDHOu86_J0WXj1^{>AfWL$F0*=vgs)He`d$N#jWYr)^i+$c zM~FY{|B$Zy$CtC=(gWYFPl+uCv4_kK%=P{KuZF=X*vpAYMBr7*!TGNeln%|0{a~&P zt_E8inik}NTphRc#pLK4A+teIeq?J>7=ur>TvnMv+B8O4i`)|OufAA-2?u~ zr_Pw9TzKjYD#unXS7A_LnYI7=a*o79vfuygjLNwo{9-mZ{yq!-JH-Ubya8G_1mC?m z^YyrbK&01YcaM@%d64g?TY(0SM|R?ZHKnRo)ltsT*5r}@PKZ^PPX|XvtEvTHK z%<_w~$E;z2O2TYEzR8X9%cf2_FL-#{7GIEIaqAyhtdn8jYy>T=*sz)RMh?59XYu9M zq##9)LhDPj(&hiWY_m8tzv>5bfGjvT%^Vh=zW$2EapmW`><=!l^vPwkk5-uY!TrZ% zj{21h3swtc1Od&ubcSug(6+XMJxy6;i^G)H8XY+nZ#(=Ab&T>2~dB5Cy#&z%7;~cG7VpY?>u?UHP zilO4ta~uu(92R7DD6IDLz?rY-u<(e3K$HB#^I<f*1KJpJ)mlw+wT!%Bff?K7Ttl2`sd-0&e?{7)!P!z!_&cibv0znJ>AH7>}iDCXn| zeJ8j@QQ}CM#p2V`msfkla$j1vK8Znvl^FM@}G6*q!z2=y$;25C9pnI`ShP)%B44Lx1%@ zj2`j~xf|pJnBF!z%)Q_uzFsF`Gb3Lu2U{WMpO~!X56|`1yga3{0F+?gIWORKcy4sX zljF|>rcA9A16hefwT;gdyB(!p?wfq(qdNCL28E2w%+6e^J97mzUf1oK^p@38w0O$z zKYv>6rXM(ewAyE{@T3P9(|^ofcW=ScrK({&3w{g9JYwRwB$Z))!L!-XX<_Us=UuKR zRS&5A5&Y+K_&y6m$ld^Bixz>5&$at@R)jjw_7BkbnIa&4;Jj+Ymef6*_3sYfmt@G0 zW?2@iu6RLSphPlk>AuVBniuxfHVcU?%GOH?Z@hS|nzR1bD_dp;&c;oz7MV`??#blH zIU#LP?PN#AAQ8ob{`N;`#-*@=_8U_!J5_TqEC-#LtY8PuG4D&D4E;U~*b+kU|0^Ok4m%@BCk@nnb=Gb5nbzFO&&v zdFp)nx>6|PPQJQbjTc2sKo$N`)m6(1L%a8N?Yg{Xv%!bVE7RLzGEW5e%3R$RpLzT0 zmh8`aGi_dPIhecZXh%TC_M(En8J4%-8CR}9{ouJasLi|2IbqgU&y~lY{M~nGj^>Ln z&gRX!L3T}w%}y1dia~wtJq_N*oaO^tbmcP-Mn`ek^1hysd(GkU_gQQQwfq*1su%o;f16V^|u9&Tt_*LQMWK)B++m;?!(Dmz5)PovpE!=fy3*Rhgw9 z`U^6Edh0s7l6cpMb>x(t-?ig>zoUGa?iVxm)*oyIE%v3wO&^v^Fyyv6h@QH*l|gW_ zLgs2y!?VAa9#U8saPN?wC+F{Hc1urB|B!xKN^qsvz3a7&nTMliow{F^ov`)$<*lpb z*wUkq)G#{FeV6r)|BLv&80+roAC^C7HoSC^BlgfIrM}#4Y`6G|GM|6mT-bl#hkH(L zK}M1PA{W<8WsaXb`FGwwSO3H4aN*7!nb#2oxz?60u6y<7DNJ&+-FILAW#kQxRIR-{ zb_bTd{mtylBvbs^@Wx@c58l_#J$v>n;yKg%&w@oliUC3g1X!NRMP>*K>DZNO1i zcTaz-+@bi&T$jo9S04WQcvp4KH4AU6&X(WYPoI8DKER&nANqG+)BLv&K&>!e&IT)n zvuPYY(Fb=*C@3*LQaP!xkWbdYLu1O$7v9ZwP0F$RTI?-B!<)O98dt56vt#Ml!CSoYJ;;KpIuAG5_6N}U#Db+_bOGGAWPotGF{x}w4Hu0zDD zLn+(}UL0Z*bH0A4T`%+Sd>_Ba-Oo{8au-ghEO^=A8(Ml<%A>=Ww_w$sUAxXR_+>Zx z6x-Cc_<3^8d+;o70sBM$d)N9`TsieZ=o)il=E;|p3 zf^&t+pPRevrrvf7@jF_=`Fi5aYYz5~0aiSI+fNu=IGn4R$h|?}PRgPAybqo$|C!3# zV8!6eo^$Joke@V1%qBK37Dvt6OPtNdx;8A%pS>J+390?q$z9iC|5Ls+aB1&F)iulG zuCHy(y!u#Z$|@#v&EtE2vb8OXxvaKzX1To-x)!`XC3}HL#w4zS zZExOR=1g7Z!Z4f7=Jp!pbuMDUf9^1t&Tp~}Vt0rYSg}hsTEXD0Ri#qry{eoh$IAj? z?-nh4JVp5afnX(p3t2DZ|6F{!dfQwLUBwq5W4mmV*6nIly}J0-&6iCIC&Mhm7uT15 zpZuHU@5*LS%bS&_Qn9pC+n0f7KxA*m9duv;a+CGUfFbH&dx;Tb7?M^t)_Vm@Ps{ylgE&iLa zW-kAJ34PQ~l!@UND3raC@%8Z?W4?x6ph&$W^@5+nYpuUH&n>1F7Q3Hs1^&F5+WF!6 zF&Ps+khSjCcG1k2-|g=Yvx)xx)$rAI-5Z-d4+`J7(_kO_Vr$K zh<|V*yV99>jiEG&)$eD)6F3}$zU}t>;k|vY2h)_7 z4eEE_-pJtn!poAoDp;MzZ+nKphQsnRzUq1$agSJh^?dDz*=x_PxH3DFcM9t)7RUXu zJJlZaWG38cv6X!*^oOIaWq-t-Ien*Ac3g9)T(I)er5Cs7Ip01IC7u(u>3{&w)24Z6 zyQV$>HOiJ=j|=f!x`pi&6T|$qjjLX7S$c1#+I~)nWGM;B3D3KnzMft6tePn;{D8mF zpQ*eJyB3~dVObRxuxf21i(~bgay2F!l>^}`xu>KAY*9VXa`7OGY1H34Gles^ONL&a z(5;s!TYLE-Uy6v)l&h<)GL6rF-^#tIM%H-t8haM|`q!#|G#MQ31}u}d$>dGhyDY(X z`O&^cSr$9Zw?8@Rww=g$yt(}CVGq~pz$m5*QW~4}S!uQOGAAlZ>|(FpbxZAs;GY+tOz)>HaZ-q4 zPTh9UBV}*$LT)zSgAxZXr<^>Z{45QG=C{Wh7eP!rm6UyLuSnj-Y&?LV&iOWu@x7!V)VVgS>?~o%gf3buJEQT zdvKXGd%>%^8$3ErT?fr-F4Esq;E6T<6wx!O~@^>=i_6C*3S_+-{(`p~}cY++l ztQG@Kg{(tT9s*m^-}uzcxxp1ORd0%w(xF&gwcjsf2HV5)tvkh*UX^eRh@Z{lwek5(PoK|^j6^owNNrRw zm?>=@_1EJ0A`@w|wIMIW)HuA@j6EA=&ir-1v3QgEkB_wEB}34@*wI)7l~M=ZB+`XPd|J16$bGaxMpbFuA(yt;39COlnK}*Das>k@FWv z9gF?_hyKzGV%++wza}cY@SAPNUid@c?CF~Nkc<|U`iD2a{MJhS8>r}>vP!sw+t}-- zs77*?xY!}NhX+efeBu35^TVUdr@SjKv1vi~V{O)bGgxLFc)r<&#lC6&+0X7X7iV>g-8T0hldb2MoD}ek(x@rt7G}B2Uc2(Z(Jgu`wpw}H+&_HI z=Idl|;ABu^b*p7@jK4KijrrgN0oSFz0+T=4aMu5N+M(hwU4>yXOH+yGZ}#SG2d?^X zi$1(ydt$Ph^}+sJp+7+k4xSfO85>ki9^BhmS6_33D|nxJbD3^#?|ZLF58QtghxU0W zm3W4pU~#lp=*WzHqF1GMKI7X;fnOQ5%0G7MyQ_%q;%H)V^vw01DZKCb&*Y#C`(sld z9RH~LN0Q+{5~He{mRHar7DxNzu|gGwOS!wX10HrUgoM6nC^Pn)pSj6r znx@uv<`QmU7S2UW{YzFZIQplK#rA%RYJ=cE3xD-fqM=pFcMq{RzI^Llp`PRY(#b%@ zCXiA14@X_zxw|KgT(5?>Y&US6kR0&y$!5+~Gk(lm;Qm7ShiBcln*XP!YkMtr+SQtR z+DTxF{K0Hvm$Ta*{N(Fcw`^VFD~WBsA2y5sTgB$kc|cXrPjZ72cSVlJ^G8A^Q+I24 zz2CilCr55Urr^FCcF)~j7P)4cy9lUo+_Dh6bT4*(@J@r9#`Bv?c5>9!u*b|$pSa5H zrI;GWEw+R+Z;v}YSeye&3HtIL6TK8OcvU!V{i>O9yTA2-`%jKI7W?pr{+bM4EP71} zPYVRume2mf;v^QG;J;`Ni#^kh)en}lGIY02&T&=bI5n-=V8*>g4jL+N0^@FO3SgW0 zeq(oalJZ?AFIGpjZPR$ITO7A`vmTtV!TqV9q(*aW@tUZcO2JH*b#tcsOgU;Rp&}tP zW5o?k_Tz{4RZgE4Gw~$f1zn#XMS{CxZgn3QcHpQ8nFn&{>`kshR!#yc9KSy3?PT*? zs^ik)QqI_a!Tp2skDI#DDl3y&9IG8CeA=P9c%|#Y$=Y9F zi#!Ww^GiLZ7ALX$jr|UeAC!Ms@-(nGZhtb#F3hY^bZv{yzJqd!ht7RmXtU{Qx61q7 zvuzA6eJ>PbdCR63-E5qpno=nGL*=yZ2jvyF^`cc|*X1ziHZ7<=Ke=;mBuCX7X2Z|zmxMrpwO^i{@{eJ zrds7IJ3js4s262gpzC!*Eo14^v#}?NY!#BXwRSal94KD99u!{spIptFy4P;H^y!%y z&n>mp>sZgGd!!^~JINpHe?KEca&Zvr^5_`~9zR#j{;;npU@71cp&e;7RU6j0!}!wy1iJO zGsTd%a-$-=f_# zzh7Zd;dT~K*>a0R%x-zc z!^#68S~BcS^Vgrh`}Di9k>ZTCKW}n0wK$5WnD2D>RFfk1Oms<4%{`-(J|8YmfhB9U z?H3OAwTe3OMQ2rJpYg)pQ&ToLN!C_}D|0dlvwYnnGG)4h$BKl9n-$jtxRu|#ot4t3 zQre*4Q5oCp$fU^K*k7ygBQUJ9$X&?VSzyVYb%zuhC$t_oUbjO>`}h^PoysfcZm!gq z(9M~$`_@Sxjg*CxQtCPCri3rOGx3X`5R2w!e*+JVl!ZYl`$3}ZcP8r2RpSUsi%*;o zaKg#eV4<>@jAv2X@u`sv8MbhB7e^gtq@Z2PfU@7o_UcnGNQY?A*aCd;HGDsjB|f&0w6 zlWaGcK0OuE>@KeAXm*y<|7-4<+R0uE z9$W0Xz~3~#{*(LU)Zr*4bNE~FLPcu%N1tf zY*rIzbW-FNmHzGV)AHLR#tW(s6dX3{w>XK3G0k87SLH|GzblLr6i)0DVB>7nX;Jt# zy>`K$Z{HQY7H?*8{MHH%)JsYGZ}K>`)@}GFPGzl3n^7jLRDVTYb^Xi>}2G>wby=lf43`y zU&wL7U&R-<_AV%Vvm(VJ?v3#8hxe?-UP_rXDI|JcdZKz|$?gw@Hk@TL-ru_aZde^Z z@tvazhY;IMcP(A7@3Cfw(!yZTjs)7HaV zW^9}fiU2L2KF;6A)1PrN{9i)wDz+nK*-xZp1Eg_n)flEqm} z%cW2B_lf7rm(@?qZhp+I@N-6Se?stIr-Oz|k`g}Vzu~BRGygKf3vCV|w#Z8{J{Idj zie$XMP5%3Nas9;C&Cf3frrK%d@9H|MYbBGdWz?tt`}Dt?_m7{L-uUJ1nW*{xj};c2 zh?-MlFWJ_5zTt1`f0b{>pK_aiJkxvXDZ}C