From fc6f69982e57f0f0af3505bd9cd60b0522769eca Mon Sep 17 00:00:00 2001 From: sun_hai_10 Date: Tue, 19 Mar 2024 18:32:44 +0800 Subject: [PATCH 01/10] delete gnome group packages --- normal_aarch64.xml | 77 ---------------------------------------------- normal_x86_64.xml | 77 ---------------------------------------------- oemaker.spec | 7 ++++- rpmlist.xml | 15 --------- 4 files changed, 6 insertions(+), 170 deletions(-) diff --git a/normal_aarch64.xml b/normal_aarch64.xml index 9397e42..6e09238 100644 --- a/normal_aarch64.xml +++ b/normal_aarch64.xml @@ -64,7 +64,6 @@ gpm-devel gstreamer1-devel gstreamer1-plugins-base-devel - gvfs-devel hunspell-devel java-1.8.0-openjdk-devel libXau-devel @@ -621,69 +620,6 @@ false - - - gnome-desktop - GNOME - GNOME - GNOME is a highly intuitive and user friendly desktop environment. - GNOME 是一个非常直观且用户友好的桌面环境。 - false - false - - at-spi2-atk - at-spi2-core - avahi - control-center - dconf - eog - evince - evince-nautilus - file-roller - file-roller-nautilus - firewall-config - fprintd-pam - gdm - glib-networking - gnome-bluetooth - gnome-color-manager - gnome-dictionary - gnome-font-viewer - gnome-getting-started-docs - gnome-icon-theme - gnome-packagekit - gnome-packagekit-updater - gnome-screenshot - gnome-session - gnome-session-xsession - gnome-settings-daemon - gnome-shell - gnome-themes-standard - gnome-user-docs - gvfs-afc - gvfs-afp - gvfs-archive - gvfs-fuse3 - gvfs-goa - gvfs-gphoto2 - gvfs-mtp - gvfs-smb - initial-setup-gui - libcanberra-gtk2 - libcanberra-gtk3 - librsvg2 - metacity - nautilus - nm-connection-editor - PackageKit-command-not-found - PackageKit-gtk3-module - sane-backends-drivers-scanners - vinagre - vino - xdg-user-dirs-gtk - yelp - vim-X11 - guest-desktop-agents @@ -1441,18 +1377,6 @@ vinagre - - smart-card - Smart Card Support - 智能卡支持 - Support for using smart card authentication. - 支持使用智能卡验证。 - true - true - - esc - - web-server Basic Web Server @@ -1646,7 +1570,6 @@ - diff --git a/normal_x86_64.xml b/normal_x86_64.xml index 756c7a9..77cb06c 100644 --- a/normal_x86_64.xml +++ b/normal_x86_64.xml @@ -64,7 +64,6 @@ gpm-devel gstreamer1-devel gstreamer1-plugins-base-devel - gvfs-devel hunspell-devel java-1.8.0-openjdk-devel libXau-devel @@ -620,69 +619,6 @@ false - - - gnome-desktop - GNOME - GNOME - GNOME is a highly intuitive and user friendly desktop environment. - GNOME 是一个非常直观且用户友好的桌面环境。 - false - false - - at-spi2-atk - at-spi2-core - avahi - control-center - dconf - eog - evince - evince-nautilus - file-roller - file-roller-nautilus - firewall-config - fprintd-pam - gdm - glib-networking - gnome-bluetooth - gnome-color-manager - gnome-dictionary - gnome-font-viewer - gnome-getting-started-docs - gnome-icon-theme - gnome-packagekit - gnome-packagekit-updater - gnome-screenshot - gnome-session - gnome-session-xsession - gnome-settings-daemon - gnome-shell - gnome-themes-standard - gnome-user-docs - gvfs-afc - gvfs-afp - gvfs-archive - gvfs-fuse3 - gvfs-goa - gvfs-gphoto2 - gvfs-mtp - gvfs-smb - initial-setup-gui - libcanberra-gtk2 - libcanberra-gtk3 - librsvg2 - metacity - nautilus - nm-connection-editor - PackageKit-command-not-found - PackageKit-gtk3-module - sane-backends-drivers-scanners - vinagre - vino - xdg-user-dirs-gtk - yelp - vim-X11 - guest-desktop-agents @@ -1443,18 +1379,6 @@ vinagre - - smart-card - Smart Card Support - 智能卡支持 - Support for using smart card authentication. - 支持使用智能卡验证。 - true - true - - esc - - web-server Basic Web Server @@ -1648,7 +1572,6 @@ - diff --git a/oemaker.spec b/oemaker.spec index 0d293e1..17295ce 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -11,7 +11,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 4 +Release: 5 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -172,6 +172,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Tue Mar 19 2024 sunhai - 3.1.0-5 +- ID:NA +- SUG:NA +- DESC: delete gnome group packages + * Sun Feb 4 2024 wangchong - 3.1.0-4 - ID:NA - SUG:NA diff --git a/rpmlist.xml b/rpmlist.xml index 484b6e3..c67d4af 100644 --- a/rpmlist.xml +++ b/rpmlist.xml @@ -85,7 +85,6 @@ adobe-mappings-cmap-help adobe-mappings-pdf adobe-mappings-pdf-help - adwaita-gtk2-theme aide aide-help alsa-firmware @@ -306,7 +305,6 @@ elfutils-devel ethtool ethtool-help - evolution-data-server exempi exempi-help expat @@ -398,7 +396,6 @@ grubby-help gssproxy gssproxy-help - gvfs gzip gzip-help haveged @@ -514,8 +511,6 @@ libblkid libbonobo libbonobo-help - libbonoboui - libbonoboui-help libcanberra-gtk2 libcanberra-help libcap @@ -571,15 +566,9 @@ libgcc libgcrypt libgcrypt-help - libgdata - libgdata-help libgee libgee-help libgmem - libgnome - libgnomecanvas - libgnomecanvas-help - libgnome-help libgnomekbd libgomp libgpg-error @@ -876,11 +865,7 @@ mtr-help multipath-tools multipath-tools-help - mutter - mutter-help mysql - nautilus - nautilus-help ncompress ncompress-help ncurses -- Gitee From 3c5920b535ed96225991c8a556ef7ae1d0543474 Mon Sep 17 00:00:00 2001 From: sun_hai_10 Date: Wed, 20 Mar 2024 10:58:50 +0800 Subject: [PATCH 02/10] delete initial-setup-gui --- normal_aarch64.xml | 1 - normal_x86_64.xml | 1 - oemaker.spec | 7 ++++++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/normal_aarch64.xml b/normal_aarch64.xml index 6e09238..1fa1cda 100644 --- a/normal_aarch64.xml +++ b/normal_aarch64.xml @@ -1404,7 +1404,6 @@ false glx-utils - initial-setup-gui mesa-dri-drivers plymouth-system-theme spice-vdagent diff --git a/normal_x86_64.xml b/normal_x86_64.xml index 77cb06c..6444dc6 100644 --- a/normal_x86_64.xml +++ b/normal_x86_64.xml @@ -1406,7 +1406,6 @@ false glx-utils - initial-setup-gui mesa-dri-drivers plymouth-system-theme spice-vdagent diff --git a/oemaker.spec b/oemaker.spec index 17295ce..c1b6ce0 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -11,7 +11,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 5 +Release: 6 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -172,6 +172,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Wed Mar 20 2024 sunhai - 3.1.0-6 +- ID:NA +- SUG:NA +- DESC: delete initial-setup-gui + * Tue Mar 19 2024 sunhai - 3.1.0-5 - ID:NA - SUG:NA -- Gitee From b18bb8c455d1665412cd0324efafc30986759fb3 Mon Sep 17 00:00:00 2001 From: MaYunlong Date: Wed, 27 Mar 2024 10:05:54 +0800 Subject: [PATCH 03/10] delete libvirt package --- normal_aarch64.xml | 4 +--- normal_x86_64.xml | 4 +--- oemaker.spec | 7 ++++++- rpmlist.xml | 4 +--- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/normal_aarch64.xml b/normal_aarch64.xml index 1fa1cda..942d222 100644 --- a/normal_aarch64.xml +++ b/normal_aarch64.xml @@ -1313,8 +1313,6 @@ false libvirt - libvirt-admin - libvirt-bash-completion libvirt-client libvirt-daemon libvirt-daemon-config-network @@ -1336,11 +1334,11 @@ libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage-scsi libvirt-daemon-kvm + libvirt-daemon-plugin-sanlock libvirt-daemon-qemu libvirt-devel libvirt-docs libvirt-libs - libvirt-lock-sanlock libvirt-nss python3-libvirt edk2-aarch64 diff --git a/normal_x86_64.xml b/normal_x86_64.xml index 6444dc6..26baaf2 100644 --- a/normal_x86_64.xml +++ b/normal_x86_64.xml @@ -1317,8 +1317,6 @@ false libvirt - libvirt-admin - libvirt-bash-completion libvirt-client libvirt-daemon libvirt-daemon-config-network @@ -1340,11 +1338,11 @@ libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage-scsi libvirt-daemon-kvm + libvirt-daemon-plugin-sanlock libvirt-daemon-qemu libvirt-devel libvirt-docs libvirt-libs - libvirt-lock-sanlock libvirt-nss python3-libvirt qemu-help diff --git a/oemaker.spec b/oemaker.spec index c1b6ce0..f1c0189 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -11,7 +11,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 6 +Release: 7 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -172,6 +172,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Thu Mar 28 2024 mayunlong - 3.1.0-7 +- ID:NA +- SUG:NA +- DESC: delete libvirt package + * Wed Mar 20 2024 sunhai - 3.1.0-6 - ID:NA - SUG:NA diff --git a/rpmlist.xml b/rpmlist.xml index c67d4af..5e553ce 100644 --- a/rpmlist.xml +++ b/rpmlist.xml @@ -717,8 +717,6 @@ libverto-glib libverto-libevent libvirt - libvirt-admin - libvirt-bash-completion libvirt-client libvirt-daemon libvirt-daemon-config-network @@ -739,7 +737,7 @@ libvirt-daemon-driver-storage-mpath libvirt-daemon-driver-storage-rbd libvirt-daemon-driver-storage-scsi - libvirt-daemon-kvm + libvirt-daemon-kvm libvirt-daemon-qemu libvirt-devel libvirt-docs -- Gitee From be1b4062d01448084293236252ed1a2eafb4f5a8 Mon Sep 17 00:00:00 2001 From: wangchong1995924 <15229716099@163.com> Date: Tue, 21 May 2024 11:14:23 +0800 Subject: [PATCH 04/10] fix createrepo data error --- 0001-fix-createrepo-data-error.patch | 62 ++++++++++++++++++++++++++++ oemaker.spec | 8 +++- 2 files changed, 69 insertions(+), 1 deletion(-) create mode 100644 0001-fix-createrepo-data-error.patch diff --git a/0001-fix-createrepo-data-error.patch b/0001-fix-createrepo-data-error.patch new file mode 100644 index 0000000..95e0289 --- /dev/null +++ b/0001-fix-createrepo-data-error.patch @@ -0,0 +1,62 @@ +From 04cc024539091f9207371333860a46f3ef5b4b1c Mon Sep 17 00:00:00 2001 +From: wangchong1995924 <15229716099@163.com> +Date: Tue, 21 May 2024 11:08:09 +0800 +Subject: [PATCH] fix createrepo data error + + +diff --git a/isomaker/iso.sh b/isomaker/iso.sh +index 7bf0bf9..3badcd7 100644 +--- a/isomaker/iso.sh ++++ b/isomaker/iso.sh +@@ -53,7 +53,7 @@ function gen_edge_iso() + set +e + mkdir -p "${BUILD}"/iso/repodata/ + cp "config/${ARCH}/edge_normal.xml" "${BUILD}"/iso/repodata/ +- createrepo -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso ++ createrepo -d -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${EDGE_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +@@ -105,7 +105,7 @@ function gen_everything_iso() + rm -rf "$BUILD"/iso/Packages + cp "$CONFIG" "${BUILD}"/iso/repodata/ + mv "${EVERY_DIR}" "${BUILD}"/iso/Packages +- createrepo -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso ++ createrepo -d -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +@@ -125,7 +125,7 @@ function gen_everything_debug_iso() + rm -rf "${BUILD}"/iso/Packages + cp "$CONFIG" "${BUILD}"/iso/repodata/ + mv "${EVERY_DEBUG_DIR}" "${BUILD}"/iso/Packages +- createrepo -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso ++ createrepo -d -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_DEBUG_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +@@ -144,7 +144,7 @@ function gen_everything_src_iso() + rm -rf "${BUILD}"/iso/Packages + cp "$CONFIG" "${BUILD}"/iso/repodata/ + mv "${EVERY_SRC_DIR}" "${BUILD}"/iso/Packages +- createrepo -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso ++ createrepo -d -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_SRC_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +diff --git a/isomaker/rpm.sh b/isomaker/rpm.sh +index a9efe4b..17a7eaf 100644 +--- a/isomaker/rpm.sh ++++ b/isomaker/rpm.sh +@@ -138,7 +138,7 @@ function download_rpms() + + mkdir -p "${BUILD}"/iso/repodata + cp "$CONFIG" "${BUILD}"/iso/repodata/ +- createrepo -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso ++ createrepo -d -g "${BUILD}"/iso/repodata/*.xml "${BUILD}"/iso + return 0 + } + +-- +2.27.0 + diff --git a/oemaker.spec b/oemaker.spec index f1c0189..93f0512 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -11,7 +11,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 7 +Release: 8 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -27,6 +27,7 @@ Requires: createrepo dnf-plugins-core genisoimage isomd5sum grep bash libs Requires: lorax >= 19.6.78-1 # Patch here +Patch0001: 0001-fix-createrepo-data-error.patch %description a building tool for DVD ISO making and ISO cutting @@ -172,6 +173,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Tue May 21 2024 wangchong - 3.1.0-8 +- ID:NA +- SUG:NA +- DESC: fix createrepo data error + * Thu Mar 28 2024 mayunlong - 3.1.0-7 - ID:NA - SUG:NA -- Gitee From d4b9111319a767481a754933f1d6893f54771c57 Mon Sep 17 00:00:00 2001 From: Wenlong Zhang Date: Mon, 27 May 2024 08:41:34 +0000 Subject: [PATCH 05/10] add loongarch64 support for oemaker --- add-openEuler_repo.conf-for-loongarch64.patch | 36 + desktop_normal_loongarch64.xml | 0 normal_loongarch64.xml | 1486 +++++++++++++++++ oemaker.spec | 32 +- rpmlist_loongarch64.xml | 1391 +++++++++++++++ 5 files changed, 2943 insertions(+), 2 deletions(-) create mode 100644 add-openEuler_repo.conf-for-loongarch64.patch create mode 100644 desktop_normal_loongarch64.xml create mode 100644 normal_loongarch64.xml create mode 100644 rpmlist_loongarch64.xml diff --git a/add-openEuler_repo.conf-for-loongarch64.patch b/add-openEuler_repo.conf-for-loongarch64.patch new file mode 100644 index 0000000..470b59b --- /dev/null +++ b/add-openEuler_repo.conf-for-loongarch64.patch @@ -0,0 +1,36 @@ +From ba132d9a3f1e43130c03b41d7d89a6bcb6e57306 Mon Sep 17 00:00:00 2001 +From: Wenlong Zhang +Date: Mon, 27 May 2024 08:48:30 +0000 +Subject: [PATCH] add openEuler_repo.conf for loongarch64 + +--- + envmaker/config/loongarch64/openEuler_repo.conf | 17 +++++++++++++++++ + 1 file changed, 17 insertions(+) + create mode 100644 envmaker/config/loongarch64/openEuler_repo.conf + +diff --git a/envmaker/config/loongarch64/openEuler_repo.conf b/envmaker/config/loongarch64/openEuler_repo.conf +new file mode 100644 +index 0000000..e7fc54c +--- /dev/null ++++ b/envmaker/config/loongarch64/openEuler_repo.conf +@@ -0,0 +1,17 @@ ++[main] ++debuglevel=2 ++gpgcheck=1 ++installonly_limit=3 ++clean_requirements_on_remove=True ++best=False ++skip_is_unavailable=False ++ ++ ++# This is the default, if you make this bigger yum won't see if the metadata ++ ++#in /etc/yum.repos.d ++[openEuler] ++name=openEuler ++baseurl=http://repo.openEuler.org/openEuler-24.03-LTS/everything/loongarch64/ ++enabled=1 ++gpgcheck=0 +-- +2.43.0 + diff --git a/desktop_normal_loongarch64.xml b/desktop_normal_loongarch64.xml new file mode 100644 index 0000000..e69de29 diff --git a/normal_loongarch64.xml b/normal_loongarch64.xml new file mode 100644 index 0000000..f752c6f --- /dev/null +++ b/normal_loongarch64.xml @@ -0,0 +1,1486 @@ + + + + + additional-devel + Additional Development + 附加开发 + Additional development headers and libraries for building open-source applications. + 用于构建开源应用程序的附加开发标头及程序可。 + true + false + + audit-libs-devel + bzip2-devel + c-ares-devel + cyrus-sasl-devel + e2fsprogs-devel + elfutils-devel + elfutils-libelf-devel + expat-devel + fuse3-devel + gmp-devel + lksctp-tools-devel + iptables-devel + libacl-devel + libaio-devel + libattr-devel + libblkid-devel + libcap-devel + libcap-ng-devel + libcurl-devel + libffi-devel + libgcrypt-devel + libnl3-devel + libselinux-devel + libusbx-devel + libuuid-devel + lksctp-tools-devel + lz4 + lz4-devel + lzo + lzo-devel + numactl-devel + pciutils-devel + pcre-devel + polkit-devel + popt-devel + rdma-core-devel + readline-devel + sqlite-devel + systemd-devel + tcl-devel + xfsprogs-devel + xz-devel + SDL-devel + alsa-lib-devel + binutils-devel + boost-devel + dbus-glib-devel + gd-devel + gnutls-devel + gpm-devel + gstreamer1-devel + gstreamer1-plugins-base-devel + hunspell-devel + java-1.8.0-openjdk-devel + libXau-devel + libXaw-devel + libXinerama-devel + libXmu-devel + libXrandr-devel + libcanberra-devel + libdrm-devel + libnotify-devel + libpfm-devel + libpq-devel + librsvg2-devel + libsoup-devel + libssh-devel + libtiff-devel + libxslt-devel + mariadb-devel + mpfr-devel + net-snmp-devel + newt-devel + openscap-devel + papi-devel + protobuf-c + sane-backends-devel + slang-devel + startup-notification-devel + tbb-devel + tk-devel + unixODBC-devel + xorg-x11-proto-devel + flatpak + + + + anaconda-tools + Anaconda tools + Anaconda 工具 + + false + false + + lorax + chrony + cryptsetup + device-mapper-multipath + dosfstools + dracut-network + e2fsprogs + efibootmgr + fcoe-utils + firewalld + gfs2-utils + glibc-all-langpacks + grub2-tools + grub2-tools-extra + iscsi-initiator-utils + lvm2 + mdadm + realmd + libteam + tmux + xfsprogs + authselect-compat + kdump-anaconda-addon + + + + base + Base + 基本 + The standard installation. + true + false + + acl + at + attr + bc + cpio + crontabs + cyrus-sasl + dbus + ed + file + iptstate + irqbalance + logrotate + lsof + net-tools + pciutils + psacct + quota + openEuler-release + openEuler-latest-release + sudo + symlinks + systemd-udev + tar + tree + util-linux-user + bash-completion + bpftool + bzip2 + chrony + cockpit + cryptsetup + dos2unix + dosfstools + ethtool + gnupg2 + libstoragemgmt + lvm2 + mailcap + man-pages + mdadm + mlocate + mtr + nano + realmd + rng-tools + rsync + smartmontools + sssd + strace + libteam + time + unzip + usbutils + virt-what + which + words + xfsdump + zip + cifs-utils + cockpit-doc + ima-evm-utils + nfs-utils + traceroute + zsh + + + + conflicts-baseos + Conflicts BaseOS + 与 BaseOS 冲突 + This group includes packages conflicting with an everything installation from the BaseOS repo + 这个组包括了与通过 BaseOS repo 安装的软件冲突的软件包 + false + false + + + + + container-management + Container Management + 容器管理 + Tools for managing Linux containers + 用于管理 Linux 容器的工具 + true + true + + containernetworking-plugins + + + + core + Core + 核心 + Smallest possible installation + 最小安装 + true + false + + audit + kernel + basesystem + bash + coreutils + cronie + curl + dnf + e2fsprogs + filesystem + firewalld + glibc + grubby + hostname + initscripts + iproute + iprutils + iputils + irqbalance + kbd + kexec-tools + less + man-db + ncurses + openssh + openssh-server + openssh-clients + parted + passwd + policycoreutils + procps-ng + rng-tools + rootfiles + rpm + selinux-policy-targeted + setup + shadow + sssd + sudo + systemd + tuned + util-linux + vim-minimal + xfsprogs + yum + wget + openEuler-release + openEuler-latest-release + NetworkManager + NetworkManager-config-server + authselect + dnf-plugins-core + dracut-config-rescue + kernel-tools + sysfsutils + linux-firmware + lshw + lsscsi + rsyslog + security-tool + sg3_utils + dracut-config-generic + dracut-network + rdma-core + selinux-policy-mls + + + + desktop-debugging + Desktop Debugging and Performance Tools + 桌面调试和运行工具 + GUI tools for debugging applications and performance. + 调试应用程序和性能的 GUI 工具。 + true + false + + crash + crash-trace-command + xrestop + + + + development + Development Tools + 开发工具 + A basic development environment. + 基本开发环境。 + true + true + + autoconf + automake + binutils + bison + flex + gcc + gcc-c++ + glibc-devel + gettext + gdb + libtool + make + patch + pkgconf + openEuler-rpm-config + rpm-build + rpm + asciidoc + byacc + ctags + diffstat + elfutils + gcc-gfortran + git + subversion + intltool + ltrace + patchutils + perl-Fedora-VSP + perl-generators + pesign + source-highlight + systemtap + valgrind + valgrind-devel + babel + chrpath + expect + gcc-objc + gcc-objc++ + mercurial + mod_dav_svn + systemtap-sdt-devel + systemtap-server + cmake + rpmdevtools + rpmlint + + + + dial-up + Dial-up Networking Support + 拨号网络支持 + + true + false + + ppp + ModemManager + NetworkManager-adsl + lrzsz + minicom + + + + dns-server + DNS Name Server + DNS 名称服务器 + This package group allows you to run a DNS name server (BIND) on the system. + 该软件包组允许您在系统上运行 DNS 名称服务器(BIND)。 + false + false + + bind + bind-chroot + bind-dyndb-ldap + unbound + + + + directory-client + Directory Client + 目录客户端 + Clients for integration into a network managed by a directory service. + 用于整合到使用目录服务管理的网络的客户端。 + false + false + + adcli + oddjob-mkhomedir + realmd + sssd + clevis-dracut + clevis-udisks2 + krb5-pkinit + krb5-workstation + luksmeta + nss-pam-ldapd + openldap-clients + samba-winbind + samba-winbind-clients + sssd-dbus + sssd-tools + sssd-winbind-idmap + + + + file-server + File and Storage Server + 文件及存储服务器 + CIFS, SMB, NFS, iSCSI, iSER, and iSNS network storage server. + CIFS, SMB, NFS, iSCSI, iSER 及 iSNS 网络存储服务器。 + true + false + + cifs-utils + gssproxy + nfs-utils + nfs4-acl-tools + samba + open-isns + + + + opengauss-server + openGauss Server + openGauss数据库 + openGauss is an open source relational database management system. + openGauss一款开源的关系数据库管理系统。 + true + false + + lz4-devel + protobuf-devel + snappy-devel + zstd-devel + boost-devel + libcgroup-devel + unixODBC-devel + jemalloc-devel + java-1.8.0-openjdk-devel + libedit-devel + libaio-devel + numactl-devel + DCF + + + + fonts + Fonts + 字体 + Fonts packages for rendering text on the desktop. + 用于在桌面显示文字的字体软件包。 + true + false + + dejavu-sans-fonts + dejavu-sans-mono-fonts + dejavu-serif-fonts + abattis-cantarell-fonts + gnu-free-mono-fonts + gnu-free-sans-fonts + gnu-free-serif-fonts + google-noto-sans-cjk-ttc-fonts + google-noto-serif-cjk-ttc-fonts + jomolhari-fonts + julietaula-montserrat-fonts + paktype-naskh-basic-fonts + paratype-pt-sans-fonts + sil-abyssinica-fonts + sil-nuosu-fonts + sil-padauk-fonts + smc-meera-fonts + stix-fonts + thai-scalable-waree-fonts + bpg-algeti-fonts + bpg-chveulebrivi-fonts + bpg-courier-fonts + bpg-courier-s-fonts + bpg-elite-fonts + bpg-excelsior-fonts + bpg-glaho-fonts + bpg-ingiri-fonts + bpg-nino-medium-cond-fonts + bpg-nino-medium-fonts + bpg-sans-fonts + bpg-sans-medium-fonts + bpg-sans-modern-fonts + bpg-sans-regular-fonts + bpg-serif-fonts + bpg-serif-modern-fonts + fontawesome-fonts + google-droid-kufi-fonts + google-droid-sans-fonts + google-droid-sans-mono-fonts + google-droid-serif-fonts + gubbi-fonts + kacst-art-fonts + kacst-book-fonts + kacst-decorative-fonts + kacst-digital-fonts + kacst-farsi-fonts + kacst-letter-fonts + kacst-naskh-fonts + kacst-office-fonts + kacst-one-fonts + kacst-pen-fonts + kacst-poster-fonts + kacst-qurn-fonts + kacst-screen-fonts + kacst-title-fonts + kacst-titlel-fonts + kurdit-unikurd-web-fonts + lato-fonts + madan-fonts + nafees-web-naskh-fonts + navilu-fonts + overpass-fonts + paktype-naqsh-fonts + paktype-tehreer-fonts + saab-fonts + samyak-devanagari-fonts + samyak-gujarati-fonts + samyak-malayalam-fonts + samyak-odia-fonts + samyak-tamil-fonts + sil-scheherazade-fonts + smc-anjalioldlipi-fonts + smc-dyuthi-fonts + smc-kalyani-fonts + smc-rachana-fonts + smc-raghumalayalam-fonts + smc-suruma-fonts + stix-math-fonts + thai-scalable-garuda-fonts + thai-scalable-kinnari-fonts + thai-scalable-loma-fonts + thai-scalable-norasi-fonts + thai-scalable-purisa-fonts + thai-scalable-sawasdee-fonts + thai-scalable-tlwgmono-fonts + thai-scalable-tlwgtypewriter-fonts + thai-scalable-tlwgtypist-fonts + thai-scalable-tlwgtypo-fonts + thai-scalable-umpush-fonts + tibetan-machine-uni-fonts + wqy-microhei-fonts + xorg-x11-fonts-100dpi + xorg-x11-fonts-75dpi + xorg-x11-fonts-ISO8859-1-100dpi + xorg-x11-fonts-ISO8859-1-75dpi + xorg-x11-fonts-ISO8859-14-100dpi + xorg-x11-fonts-ISO8859-14-75dpi + xorg-x11-fonts-ISO8859-15-100dpi + xorg-x11-fonts-ISO8859-15-75dpi + xorg-x11-fonts-ISO8859-2-100dpi + xorg-x11-fonts-ISO8859-2-75dpi + xorg-x11-fonts-ISO8859-9-100dpi + xorg-x11-fonts-ISO8859-9-75dpi + xorg-x11-fonts-Type1 + xorg-x11-fonts-cyrillic + xorg-x11-fonts-misc + + + + ftp-server + FTP Server + FTP 服务器 + These tools allow you to run an FTP server on the system. + 这些工具允许您在系统上运行 FTP 服务器。 + true + false + + vsftpd + + + + gnome-apps + GNOME Applications + GNOME 应用程序 + A set of commonly used GNOME Applications. + 一组经常使用的 GNOME 应用程序。 + false + false + + + + + guest-desktop-agents + Guest Desktop Agents + 虚拟机桌面代理 + Agents used when running as a virtualized desktop. + 作为虚拟桌面运行时使用的代理。 + true + false + + qemu-guest-agent + spice-vdagent + + + + hardware-monitoring + Hardware Monitoring Utilities + 硬件监控工具 + A set of tools to monitor server hardware. + 一组用来监控服务器硬件的工具。 + true + false + + rasdaemon + smartmontools + lm_sensors + + + + hardware-support + Hardware Support + This group is a collection of tools for various hardware specific utilities. + true + false + + bolt + usb_modeswitch + linux-firmware + lsscsi + opensc + openssl-pkcs11 + pcsc-lite + pcsc-lite-ccid + + + + headless-management + Headless Management + 无图形终端系统管理工具 + Tools for managing the system without an attached graphical console. + 用于管理无图像终端系统的工具。 + true + true + + PackageKit + cockpit + openssh-server + sscg + + + + infiniband + Infiniband Support + Infiniband 支持 + Software designed for supporting clustering, grid connectivity, and low-latency, high bandwidth storage using RDMA-based InfiniBand, iWARP, RoCE, and OPA fabrics. + true + false + + libibverbs + libibverbs-utils + librdmacm + librdmacm-utils + rdma-core + ibacm + iwpmd + perftest + srp_daemon + opensm + + + + input-methods + Input Methods + 输入法 + Input method packages for the input of international text. + 输入非英文文本的输入法软件包 + true + false + + ibus-m17n + ibus-sayura + ibus-table + ibus-table-array30 + gtk2-immodule-xim + gtk3-immodule-xim + ibus-gtk2 + ibus-gtk3 + + + + internet-applications + Internet Applications + 互联网应用程序 + Email, chat, and video conferencing software. + 电子邮件、聊天和视频会议软件。 + false + false + + + + + internet-browser + Internet Browser + 互联网浏览器 + The Firefox web browser + Firefox web 浏览器 + true + false + + + + + java-platform + Java Platform + Java 平台 + Java support for the Red Hat Enterprise Linux Server and Desktop Platforms. + Red Hat Enterprise Linux 服务器和桌面平台的 Java 支持。 + true + false + + java-1.8.0-openjdk + + + + large-systems + Large Systems Performance + 大系统性能 + Performance support tools for large systems. + 用于大型系统的性能支持工具。 + true + false + + numactl + numad + hwloc + mstflint + qperf + libvma + + + + legacy-unix + Legacy UNIX Compatibility + 传统 UNIX 兼容性 + Compatibility programs for migration from or working with legacy UNIX environments. + 用于从继承 UNIX 环境中迁移或者可用于该环境的兼容程序。 + true + true + + mksh + + + + legacy-x + Legacy X Window System Compatibility + 传统 X Windows 系统的兼容性 + Compatibility programs for migration from or working with legacy X Window System environments. + 用于从继承 X Windows 环境中迁移或者可用于该环境的兼容程序。 + true + false + + libXmu + xorg-x11-fonts-ISO8859-1-100dpi + xorg-x11-fonts-Type1 + xorg-x11-fonts-misc + xterm + + + + mail-server + Mail Server + 邮件服务器 + These packages allow you to configure an IMAP or SMTP mail server. + 这些软件包允许您配置 IMAP 或 Postfix 邮件服务器。 + true + false + + cyrus-sasl + postfix + + + + mainframe-access + Mainframe Access + 主框架访问 + Tools for accessing mainframe computing resources. + 访问主框架计算源的工具。 + true + false + + x3270-text + + + + network-file-system-client + Network File System Client + 网络文件系统客户端 + Enables the system to attach to network storage. + 启用该系统附加到网络存储。 + true + false + + cifs-utils + device-mapper-multipath + fcoe-utils + gssproxy + iscsi-initiator-utils + lldpad + nfs-utils + nfs4-acl-tools + samba-client + cachefilesd + cgdcbxd + + + + network-server + Network Servers + 网络服务器 + These packages include network-based servers such as DHCP, Kerberos and NIS. + 这些软件包包括基于网络的服务器,例如 DHCP、Kerberos 和 NIS。 + true + true + + dhcp-server + krb5-server + dnsmasq + freeradius + libreswan + radvd + rsyslog + rsyslog-mysql + rsyslog-pgsql + rsyslog-relp + tang + tftp-server + + + + network-tools + Networking Tools + 联网工具 + Tools for configuring and analyzing computer networks. + 配置和分析计算机网络的工具。 + true + false + + arpwatch + ipset + iptraf-ng + iptstate + dnsmasq + freeradius + libreswan + radvd + rsyslog + rsyslog-mysql + rsyslog-pgsql + rsyslog-relp + tang + tftp-server + + + + networkmanager-submodules + Common NetworkManager submodules + This group contains NetworkManager submodules that are commonly used, but may not be wanted in some streamlined configurations. + true + false + + NetworkManager-bluetooth + NetworkManager-wwan + dhcp + iptables + dnsmasq + + + + performance + Performance Tools + 性能工具 + Tools for diagnosing system and application-level performance problems. + 诊断系统和程序级别性能问题的工具。 + true + false + + iotop + perf + hdparm + tuned + sysstat + powertop + fio + iperf3 + libpfm + papi + tuned-utils + + + + platform-devel + Platform Development + 平台开发 + Recommended development headers and libraries for developing applications. + 推荐用于开发应用程序的标头及程序库。 + true + false + + fontconfig-devel + freetype-devel + glib2-devel + glibc-devel + krb5-devel + libjpeg-turbo-devel + libpng-devel + libstdc++-devel + ncurses-devel + openldap-devel + openssl-devel + pam-devel + zlib-devel + atk-devel + cairo-devel + dbus-devel + desktop-file-utils + gtk2-devel + gtk3-devel + libICE-devel + libSM-devel + libX11-devel + libXext-devel + libXft-devel + libXi-devel + libXrender-devel + libXt-devel + libXtst-devel + libXv-devel + libXxf86dga-devel + libdb-devel + libjpeg-turbo-devel + libstdc++-devel + libvirt-devel + libxml2-devel + libxshmfence-devel + mesa-libGL-devel + mesa-libGLU-devel + nss-devel + pango-devel + qt5-qtdoc + qt5-qttranslations + + + + print-client + Printing Client + 打印客户端 + Tools for printing to a local printer or a remote print server. + 在本地打印机和远程打印服务器中打印的工具。 + true + false + + + + + python-web + Python Web + Basic Python web application support. + 基本 Python 网页应用程序支持。 + true + false + + freetype-devel + libcurl + libcurl-devel + libjpeg-turbo + libjpeg-turbo-devel + python3-magic + + + + remote-system-management + Remote Management for Linux + Linux 的远程管理 + Remote management interface. + Linux 的远程管理界面。 + true + false + + cockpit + net-snmp + net-snmp-utils + tog-pegasus + + + + scientific + Scientific Support + 科学记数法支持 + Tools for mathematical and scientific computations, and parallel computing. + 用于数学和科学计算以及平行计算的工具。 + true + true + + units + fftw + fftw-devel + fftw-static + gsl-devel + lapack + python3-numpy + python3-scipy + + + + security-tools + Security Tools + 安全性工具 + Security tools for integrity and trust verification. + 用于完整性和可信验证的安全性工具。 + true + true + + hmaccalc + tpm-quote-tools + tpm-tools + trousers + scap-security-guide + aide + openscap + openscap-engine-sce + openscap-utils + scap-security-guide-doc + + + + server-product + Server product core + Packages mandatory for the server product. + true + false + + chrony + polkit + realmd + openEuler-release + timedatex + dhcp + NetworkManager-config-server + NetworkManager + + + + smb-server + Windows File Server + Windows 文件服务器 + This package group allows you to share files between Linux and MS Windows(tm) systems. + 该软件包组允许您在 Linux 和 MS Windows(tm) 系统间共享文件。 + true + false + + samba + samba-client + cifs-utils + + + + standard + Standard + 标准 + The standard installation. + 标准安装。 + true + false + + acl + at + attr + bc + cpio + crontabs + cyrus-sasl + dbus + ed + file + iptstate + irqbalance + logrotate + lsof + net-tools + pciutils + quota + openEuler-release + sudo + symlinks + systemd-udev + tar + tree + util-linux-user + bash-completion + bpftool + bzip2 + chrony + cockpit + cryptsetup + dos2unix + dosfstools + ethtool + gnupg2 + lvm2 + mailcap + man-pages + mdadm + mlocate + mtr + realmd + rsync + smartmontools + sssd + strace + libteam + time + unzip + usbutils + virt-what + which + words + xfsdump + zip + cifs-utils + cockpit-doc + ima-evm-utils + nfs-utils + traceroute + zsh + psacct + libstoragemgmt + nano + rng-tools + rsyslog + rsyslog-relp + nmap + pinfo + plymouth + tcpdump + vim-enhanced + wget + + + + system-tools + System Tools + 系统工具 + This group is a collection of various tools for the system, such as the client for connecting to SMB shares and tools to monitor network traffic. + 这组软件包是各类系统工具的集合,如:连接 SMB 共享的客户;监控网络交通的工具。 + true + true + + chrony + cifs-utils + openldap-clients + samba-client + setserial + tmux + zsh + arpwatch + chrpath + fuse + iotop + lzop + xdelta + environment-modules + libreswan + nmap + tigervnc + PackageKit-command-not-found + aide + amanda-client + convmv + createrepo_c + freerdp + gpm + gssdp + gupnp + mc + mtx + net-snmp-utils + oddjob + oddjob-mkhomedir + rear + sysstat + x3270-x11 + + + + virtualization-hypervisor + Virtualization Hypervisor + 虚拟化 Hypervisor + Smallest possible virtualization host installation. + 最小的虚拟化主机安装。 + false + false + + libvirt + libvirt-client + libvirt-daemon + libvirt-daemon-config-network + libvirt-daemon-config-nwfilter + libvirt-daemon-driver-interface + libvirt-daemon-driver-network + libvirt-daemon-driver-nodedev + libvirt-daemon-driver-nwfilter + libvirt-daemon-driver-qemu + libvirt-daemon-driver-secret + libvirt-daemon-driver-storage + libvirt-daemon-driver-storage-core + libvirt-daemon-driver-storage-disk + libvirt-daemon-driver-storage-gluster + libvirt-daemon-driver-storage-iscsi + libvirt-daemon-driver-storage-iscsi-direct + libvirt-daemon-driver-storage-logical + libvirt-daemon-driver-storage-mpath + libvirt-daemon-driver-storage-rbd + libvirt-daemon-driver-storage-scsi + libvirt-daemon-kvm + libvirt-daemon-plugin-sanlock + libvirt-daemon-qemu + libvirt-devel + libvirt-docs + libvirt-libs + libvirt-nss + python3-libvirt + qemu-help + qemu + qemu-block-iscsi + qemu-img + + + + openvswitch + Virtualization Openvswitch + 虚拟switch + vswitch installation. + 安装vswitch。 + false + false + + openvswitch + + + + remote-desktop-clients + Remote Desktop Clients + 远程桌面客户端 + + true + false + + freerdp + tigervnc + vinagre + + + + web-server + Basic Web Server + 基本网页服务器 + These tools allow you to run a Web server on the system. + 这些工具允许您在系统上运行万维网服务器。 + true + false + + httpd + mod_fcgid + mod_ssl + libmemcached + memcached + mod_security + + + + x11 + X Window System + X 窗口系统 + X Window System Support. + X 窗口系统支持。 + false + false + + glx-utils + mesa-dri-drivers + plymouth-system-theme + spice-vdagent + xorg-x11-drivers + xorg-x11-server-Xorg + xorg-x11-utils + xorg-x11-xauth + xorg-x11-xinit + xvattr + mesa-libGLES + tigervnc-server + wayland-protocols-devel + xorg-x11-drv-libinput + + + + development + Development + 开发 + Packages which provide functionality for developing and building applications. + 用于开发和构建应用程序的软件包。 + 90 + + additional-devel + development + platform-devel + + + + servers + Servers + 服务器 + Software used for running network servers + 用于运行网络服务器的软件 + 20 + + file-server + ftp-server + mail-server + network-server + web-server + + + + base-system + System + 系统 + Core system components. + 核系统组件。 + 10 + + backup-client + debugging + java-platform + print-client + smart-card + dial-up + hardware-monitoring + infiniband + large-systems + legacy-unix + mainframe-access + network-tools + performance + scientific + security-tools + standard + + + + desktops + Desktops + 桌面环境 + Desktops and thin clients. + 桌面和瘦客户端。 + 70 + + base-x + desktop-debugging + fonts + input-methods + legacy-x + remote-desktop-clients + + + + apps + Applications + 应用程序 + Applications to perform a variety of tasks + 执行不同任务的应用程序 + 80 + + graphics + + + + minimal-environment + Minimal Install + 最小安装 + Basic functionality. + 基本功能。 + 1 + + core + + + standard + + + + server-product-environment + Server + 服务器 + An integrated, easy-to-manage server. + 集成的易于管理的服务器 + 2 + + container-management + core + hardware-support + headless-management + server-product + standard + + + debugging + dns-server + file-server + ftp-server + hardware-monitoring + infiniband + mail-server + network-file-system-client + network-server + performance + remote-system-management + smb-server + virtualization-hypervisor + web-server + + + + virtualization-host-environment + Virtualization Host + 虚拟化主机 + Minimal virtualization host. + 最小虚拟化主机。 + 40 + + base + core + virtualization-hypervisor + + + debugging + network-file-system-client + remote-system-management + openvswitch + + + + + + + + + + + + diff --git a/oemaker.spec b/oemaker.spec index 93f0512..2a73971 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -6,12 +6,16 @@ %global efi_x64 1 %endif +%ifarch loongarch64 +%global efi_loongarch64 1 +%endif + Name: oemaker Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 8 +Release: 9 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -22,12 +26,16 @@ Source4: edge_normal_aarch64.xml Source5: edge_normal_x86_64.xml Source6: desktop_normal_aarch64.xml Source7: desktop_normal_x86_64.xml +Source8: normal_loongarch64.xml +Source9: rpmlist_loongarch64.xml +Source10: desktop_normal_loongarch64.xml Requires: createrepo dnf-plugins-core genisoimage isomd5sum grep bash libselinux-utils libxml2 anaconda libselinux-utils Requires: lorax >= 19.6.78-1 # Patch here Patch0001: 0001-fix-createrepo-data-error.patch +Patch0002: add-openEuler_repo.conf-for-loongarch64.patch %description a building tool for DVD ISO making and ISO cutting @@ -54,8 +62,15 @@ rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/aarch64/normal.xm cp %{SOURCE1} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/aarch64/normal.xml rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/x86_64/normal.xml cp %{SOURCE2} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/x86_64/normal.xml +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/loongarch64/normal.xml +cp %{SOURCE8} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/loongarch64/normal.xml +%ifarch loongarch64 +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml +cp %{SOURCE9} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml +%else rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml cp %{SOURCE3} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml +%endif rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/aarch64/edge_normal.xml cp %{SOURCE4} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/aarch64/edge_normal.xml rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/x86_64/edge_normal.xml @@ -64,7 +79,10 @@ rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/aarch64/desktop_n cp %{SOURCE6} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/aarch64/desktop_normal.xml rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/x86_64/desktop_normal.xml cp %{SOURCE7} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/x86_64/desktop_normal.xml +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/loongarch64/desktop_normal.xml +cp %{SOURCE10} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/loongarch64/desktop_normal.xml cd %{_builddir}/%{name}-%{version}/%{name} + %autopatch -p1 %install @@ -91,9 +109,11 @@ install -m 700 %{name}/isomaker/rpm.sh %{buildroot}/opt/oemaker/rpm.sh install -m 700 %{name}/isomaker/env_record.sh %{buildroot}/opt/oemaker/env_record.sh install -m 700 %{name}/isomaker/env_restore.sh %{buildroot}/opt/oemaker/env_restore.sh install -m 400 %{name}/isomaker/config/rpmlist.xml %{buildroot}/opt/oemaker/config/rpmlist.xml +%ifnarch loongarch64 install -m 640 %{name}/isomaker/config/${sys_arch}/livecd/live/config_files/${sys_arch}/* %{buildroot}/opt/oemaker/config/${sys_arch}/livecd/live/config_files/${sys_arch}/ install -m 400 %{name}/isomaker/config/${sys_arch}/livecd/livecd_${sys_arch}.ks %{buildroot}/opt/oemaker/config/${sys_arch}/livecd/livecd_${sys_arch}.ks install -m 600 %{name}/isomaker/config/${sys_arch}/livecd/rpmlist %{buildroot}/opt/oemaker/config/${sys_arch}/livecd/rpmlist +%endif install -m 400 %{name}/isomaker/config/${sys_arch}/desktop_normal.xml %{buildroot}/opt/oemaker/config/${sys_arch}/desktop_normal.xml install -m 400 %{name}/isomaker/config/${sys_arch}/edge_normal.xml %{buildroot}/opt/oemaker/config/${sys_arch}/edge_normal.xml install -m 400 %{name}/isomaker/config/${sys_arch}/normal.xml %{buildroot}/opt/oemaker/config/${sys_arch}/normal.xml @@ -101,11 +121,14 @@ install -m 400 %{name}/isomaker/config/${sys_arch}/standard.conf %{buildroot}/op %ifarch x86_64 install -m 700 %{name}/isomaker/config/x86_64/livecd/live/x86.tmpl %{buildroot}/opt/oemaker/config/x86_64/livecd/live/x86.tmpl install -m 400 %{name}/isomaker/config/x86_64/ks.cfg %{buildroot}/opt/oemaker/config/x86_64/ks.cfg -%else +%endif +%ifarch aarch64 install -m 700 %{name}/isomaker/config/aarch64/livecd/live/aarch64.tmpl %{buildroot}/opt/oemaker/config/aarch64/livecd/live/aarch64.tmpl %endif +%ifnarch loongarch64 install -m 700 %{name}/isomaker/config/common/livecd/live/* %{buildroot}/opt/oemaker/config/common/livecd/live/ install -m 400 %{name}/isomaker/config/common/livecd/root_pwd %{buildroot}/opt/oemaker/config/common/livecd/root_pwd +%endif install -m 700 %{name}/isomaker/docs/* %{buildroot}/opt/oemaker/docs/ cp -ar %{name}/isomaker/80-openeuler %{buildroot}/opt/oemaker/ @@ -173,6 +196,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Tue May 21 2024 Wenlong Zhang - 3.1.0-9 +- ID:NA +- SUG:NA +- DESC: add loongarch64 support for oemaker + * Tue May 21 2024 wangchong - 3.1.0-8 - ID:NA - SUG:NA diff --git a/rpmlist_loongarch64.xml b/rpmlist_loongarch64.xml new file mode 100644 index 0000000..fd594ee --- /dev/null +++ b/rpmlist_loongarch64.xml @@ -0,0 +1,1391 @@ + + + + mariadb + mariadb-server + + + abrt-addon-ccpp + podman-help + libcmpiCppImpl0 + libev-libevent-devel + mariadb-devel + mariadb-test + podman-docker + python3-unversioned-command + python3-abrt-container-addon + + + texlive-collection-bibtexextra + texlive-collection-mathscience + texlive-collection-latexextra + texlive-collection-fontsextra + texlive-ctanupload + texlive-exceltex + texlive-latexindent + texlive-biblatex-apa + texlive-collection-binextra + texlive-collection-fontutils + texlive-includernw + texlive-oldstandard + texlive-scheme-full + texlive-scheme-gust + texlive-scheme-medium + texlive-scheme-tetex + gnome-boxes + nodejs-grunt-contrib-watch + + + drbd + gnome-boxes + nodejs-grunt-contrib-watch + + + drbd-debuginfo + drbd-debugsource + gnome-boxes-debuginfo + gnome-boxes-debugsource + + + edk2-aarch64 + grub2-efi-aa64 + grub2-efi-aa64-modules + kae-driver + kae-openssl + kae-zip + uadk_engine + libwd + shim-aa64 + + + edk2-ovmf + grub2-efi-x64 + grub2-efi-x64-modules + shim + + + grub2-efi-loongarch64 + grub2-efi-loongarch64-modules + + + abattis-cantarell-fonts + abattis-cantarell-fonts-help + accountsservice + accountsservice-help + accountsservice-libs + acl + acl-help + acpid + acpid-help + adcli + adcli-help + adobe-mappings-cmap + adobe-mappings-cmap-help + adobe-mappings-pdf + adobe-mappings-pdf-help + aide + aide-help + alsa-firmware + alsa-tools-firmware + apr + apr-help + arptables + arptables-help + arpwatch + arpwatch-help + asciidoc + asciidoc-help + at + at-help + attr + attr-help + audiofile + audit + audit-help + audit-libs + audit-libs-devel + authd + authd-help + authselect + authselect-compat + authselect-help + authselect-libs + avahi + avahi-autoipd + avahi-compat-howl + avahi-compat-libdns_sd + avahi-dnsconfd + avahi-gobject + avahi-libs + avahi-tools + basesystem + bash + bash-completion + bash-completion-help + bash-help + bc + bc-help + bind-chroot + bind-dyndb-ldap + bind-libs + bind-utils + binutils + binutils-devel + bison + bison-help + blas-devel + blktrace + blktrace-help + bluez + bluez-help + boost-atomic + boost-chrono + boost-context + boost-date-time + boost-devel + boost-filesystem + boost-graph + boost-help + boost-iostreams + boost-locale + boost-math + boost-program-options + boost-python3 + boost-random + boost-regex + boost-serialization + boost-system + boost-test + boost-thread + boost-timer + boost-wave + bridge-utils + brotli + btrfs-progs + btrfs-progs-help + busybox + busybox-help + bzip2 + bzip2-help + ca-certificates + cachefilesd + cachefilesd-help + c-ares + c-ares-help + ccid + chkconfig + chkconfig-help + chrony + chrpath + chrpath-help + cifs-utils + cifs-utils-help + cjkuni-ukai-fonts + cjkuni-ukai-fonts-help + clang + clang-analyzer + clang-devel + clang-libs + clang-resource-filesystem + clang-tools-extra + clibcni-devel + cloud-init + cloud-init-help + clutter + clutter-gst3 + clutter-gst3-help + clutter-gtk + clutter-gtk-help + clutter-help + cockpit + cockpit-help + cogl + cogl-help + color-filesystem + containers-common + container-selinux + coreutils + coreutils-help + cpio + cpio-help + cracklib + cracklib-dicts + cracklib-help + crash + crash-help + createrepo_c + createrepo_c-help + cronie + cronie-help + crontabs + crontabs-help + crypto-policies + cryptsetup + cryptsetup-help + ctags + ctags-help + cups + cups-filters + cups-help + cups-libs + cups-pk-helper + curl + curl-help + cvs + cvs-help + cyrus-sasl + cyrus-sasl-gs2 + cyrus-sasl-help + cyrus-sasl-ldap + cyrus-sasl-lib + cyrus-sasl-md5 + cyrus-sasl-ntlm + cyrus-sasl-scram + dbus + dbus-glib + dbus-help + dbus-python-help + device-mapper + device-mapper-event + dhcp + dhcp-common + dhcp-libs + dhcp-server + dialog + dialog-help + diffstat + diffutils + diffutils-help + dim + dim_tools + dmidecode + dmraid + dmraid-events + dnf + dnf-data + dnf-plugins-core + dnsmasq + dnsmasq-help + dnsmasq-utils + docbook-dtds + docbook-style-xsl + docker-engine + runc + dos2unix + dosfstools + dosfstools-help + dracut + dracut-caps + dracut-config-generic + dracut-config-rescue + dracut-network + dracut-tools + dropwatch + drpm + drpm-devel + drpm-help + e2fsprogs + e2fsprogs-devel + e2fsprogs-help + ed + efibootmgr + efibootmgr-help + efivar + efivar-help + elfutils + elfutils-devel + ethtool + ethtool-help + exempi + exempi-help + expat + expat-devel + expat-help + expect + expect-help + file + file-help + file-libs + filesystem + findutils + findutils-help + fipscheck + fipscheck-help + firewalld + firewalld-doc + firewalld-filesystem + flex + freetype + freetype-help + ftp + ftp-help + fuse + fuse-help + fxload + fxload-help + gawk + gawk-help + gcc-gfortran + gcr + gdb + gdb-help + gdbm + gdbm-devel + gdbm-help + gdk-pixbuf2 + gdk-pixbuf2-help + genisoimage + geoclue2-libs + geocode-glib + geocode-glib-help + GeoIP + GeoIP-help + gettext + gettext-help + gettext-libs + git + git-clang-format + git-help + gjs + glib2 + glib2-help + glibc + glibc-all-langpacks + glibc-common + glibc-devel + glibc-help + glibc-locale-source + gmp + gnupg2 + gnupg2-help + gnupg2-smime + gnutls + gnutls-c++ + gnutls-help + gobject-introspection + gobject-introspection-help + golang + golang-devel + golang-help + gperftools + gperftools-devel + gperftools-libs + gpgme + gpgme-help + grep + grilo + grilo-help + groff + groff-help + grpc + grpc-devel + grpc-plugins + grub2-common + grub2-help + grub2-tools + grubby + grubby-help + gssproxy + gssproxy-help + gzip + gzip-help + haveged + haveged-help + hdparm + hdparm-help + hostname + httpd + httpd-help + httpd-tools + http-parser + http-parser-devel + http-parser-help + hunspell + hunspell-en-help + hunspell-help + hwdata + hwinfo + hwinfo-help + hwloc-gui + i2c-tools-eepromer + i2c-tools-help + ima-evm-utils + ima-evm-utils-help + info + initscripts + iotop + iotop-help + ipcalc + ipcalc-help + ipmitool + ipmitool-help + iproute + iproute-help + iprutils + iprutils-help + ipset + ipset-help + ipset-libs + iptables + iptraf-ng + iptraf-ng-help + iptstate + iptstate-help + iputils + iputils-help + ipvsadm + ipvsadm-help + irqbalance + irqbalance-help + iSulad + ivtv-firmware + iw + iw-help + jansson + jansson-help + java-1.8.0-openjdk + java-1.8.0-openjdk-devel + java-1.8.0-openjdk-headless + json-c + json-c-help + json-glib + json-glib-help + kbd + kbd-help + kbd-legacy + kbd-misc + keepalived + kernel + kernel-devel + kernel-source + kernel-tools + kernel-tools-libs + kernel-tools-libs-devel + kexec-tools + kexec-tools-help + keyutils + keyutils-help + keyutils-libs-devel + kiwi-help + kiwi-tools + kmod + kmod-help + kpartx + krb5 + krb5-client + krb5-devel + krb5-help + krb5-server + lapack + lapack-devel + libisula + ldns + ldns-help + less + less-help + lftp + lftp-help + libacl + libaio + libaio-devel + libarchive + libarchive-help + libassuan + libassuan-help + libbasicobjects + libblkid + libbonobo + libbonobo-help + libcanberra-gtk2 + libcanberra-help + libcap + libcap-help + libcap-ng + libcap-ng-help + libcap-ng-python3 + libcgroup + libcgroup-devel + libcgroup-help + libcollection + libcomps + libcomps-help + libconfig + libcurl + libdaemon + libdaemon-help + libdb + libdb-cxx + libdb-devel + libdbi + libdbi-help + libdb-sql + libdb-tcl + libdb-utils + libdhash + libdmx + libdmx-help + libdnet-devel + libdnet-help + libdnet-progs + libdnf + libecap + libecap-help + libedit + libedit-devel + libedit-help + liberation-fonts + libesmtp + libesmtp-help + libestr + libevdev + libevdev-help + libevent + libevent-devel + libevhtp-devel + libexif + libexif-help + libfastjson + libfdisk + libffi + libffi-help + libgcc + libgcrypt + libgcrypt-help + libgee + libgee-help + libgmem + libgnomekbd + libgomp + libgpg-error + libgsf + libgsf-help + libgtop2 + libgtop2-help + libgweather + libgweather-help + libgxps + libgxps-help + libical + libicu-devel + libidn + libidn2 + libidn2-help + libimobiledevice + libimobiledevice-help + libini_config + libiptcdata + libiscsi + libiscsi-help + libkadm5 + libkcapi + libkcapi-help + libkcapi-hmaccalc + libksba + libksba-help + libldb + libldb-help + libmaxminddb + libmaxminddb-help + libmediaart + libmediaart-help + libmetalink + libmetalink-help + libmng + libmng-help + libmnl + libmnl-static + libmodulemd + libmount + libmspack + libmspack-help + libndp + libndp-help + libnetfilter_conntrack + libnetfilter_queue + libnfnetlink + libnfnetlink-help + libnftnl + libnghttp2 + libnl3 + libnl3-cli + libnl3-devel + libnl3-help + libnma + libnsl2 + liboauth + liboauth-help + libogg + libogg-help + libosinfo + libosinfo-help + libpath_utils + libpcap + libpcap-devel + libpcap-help + libpciaccess + libpipeline + libpipeline-help + libpkgconf + libplist + libpng + libpng-help + libpsl + libpsl-help + libpwquality + libpwquality-help + librados2 + libref_array + librepo + libreport-filesystem + libreport-help + libsamplerate + libseccomp + libseccomp-help + libsecret + libsecret-help + libselinux + libselinux-devel + libselinux-help + libselinux-utils + libsemanage + libsemanage-help + libsepol + libsepol-help + libsexy + libsexy-help + libsigsegv + libsmartcols + libsolv + libsolv-help + libssh + libssh2 + libssh2-help + libssh-help + libsss_autofs + libsss_certmap + libsss_idmap + libsss_nss_idmap + libsss_sudo + libstdc++ + libtalloc + libtalloc-help + libtasn1 + libtasn1-help + libtdb + libtdb-help + libteam + libteam-help + libtevent + libtevent-help + libthai + libthai-static + libtirpc + libtirpc-help + libtool-ltdl + libtool-help + libunistring + libunistring-help + libunwind + libunwind-help + libusal + libusb + libusbmuxd + libusbx + libuser + libuser-help + libuser-python3 + libutempter + libutempter-help + libuuid + libverto + libverto-devel + libverto-glib + libverto-libevent + libvirt + libvirt-client + libvirt-daemon + libvirt-daemon-config-network + libvirt-daemon-config-nwfilter + libvirt-daemon-driver-interface + libvirt-daemon-driver-network + libvirt-daemon-driver-nodedev + libvirt-daemon-driver-nwfilter + libvirt-daemon-driver-qemu + libvirt-daemon-driver-secret + libvirt-daemon-driver-storage + libvirt-daemon-driver-storage-core + libvirt-daemon-driver-storage-disk + libvirt-daemon-driver-storage-gluster + libvirt-daemon-driver-storage-iscsi + libvirt-daemon-driver-storage-iscsi-direct + libvirt-daemon-driver-storage-logical + libvirt-daemon-driver-storage-mpath + libvirt-daemon-driver-storage-rbd + libvirt-daemon-driver-storage-scsi + libvirt-daemon-kvm + libvirt-daemon-qemu + libvirt-devel + libvirt-docs + libvirt-libs + libvirt-nss + libwacom + libwacom-data + libwebsockets + libwebsockets-devel + libwebsockets-help + libwnck3 + libwnck3-help + libX11 + libX11-help + libx86emu + libxcrypt + libxcrypt-help + libXdmcp + libXdmcp-help + libXfont2 + libXfont2-help + libxkbcommon + libxkbcommon-x11 + libxkbfile + libxklavier + libxklavier-help + libxml2 + libxml2-help + libxslt + libxslt-help + libXvMC + libXvMC-help + libXxf86dga + libXxf86dga-help + libyaml + libyaml-help + linux-firmware + linux-firmware-ath + linux-firmware-cypress + linux-firmware-iwlwifi + linux-firmware-libertas + linux-firmware-mediatek + linux-firmware-mrvl + linux-firmware-netronome + linux-firmware-ti-connectivity + llvm + llvm-devel + llvm-doc + llvm-googletest + llvm-libs + llvm-static + llvm-test + lm_sensors + lm_sensors-devel + lm_sensors-help + lm_sensors-sensord + lockdev + lockdev-help + logrotate + logrotate-help + lshw + lshw-help + lsof + lsof-help + lsscsi + lsscsi-help + lua + lua-expat + lua-expat-help + lua-help + lua-socket + lua-socket-help + lvm2 + lvm2-help + lxc + lxc-devel + lxcfs + lxcfs-tools + lxc-help + lz4 + lz4-help + lz4-libs + lz4-devel + lzo + lzo-help + lzo-minilzo + lzop + lzop-help + m4 + m4-help + mailcap + mailcap-help + mailx + mailx-help + make + make-help + man-db + man-pages + mcstrans + mcstrans-help + mdadm + mdadm-help + mesa-filesystem + mesa-libGLES + metacity + metacity-help + mlocate + mlocate-help + mobile-broadband-provider-info + mobile-broadband-provider-info-help + mod_ldap + mod_md + mod_proxy_html + mod_session + mod_ssl + mozilla-filesystem + mpfr + mtdev + mtools + mtools-help + mtr + mtr-help + multipath-tools + multipath-tools-help + ncompress + ncompress-help + ncurses + ncurses-devel + ncurses-help + ndisc6 + netcf + netcf-help + netconsole-service + net-snmp + net-snmp-devel + net-snmp-help + nettle + nettle-help + net-tools + net-tools-help + NetworkManager + NetworkManager-help + NetworkManager-libnm + network-scripts + newt + newt-devel + newt-help + nfs4-acl-tools + nfs4-acl-tools-help + nfs-utils + nfs-utils-help + nftables + nftables-help + nmap + nmap-help + nm-connection-editor + notification-daemon + notification-daemon-help + npth + nss + nss-help + nss-mdns + nss-mdns-help + nss-pam-ldapd + nss-pam-ldapd-help + nss-pem + nss-softokn + ntp + ntp-help + numactl + numactl-devel + numactl-libs + numad + numad-help + oddjob + oddjob-help + openblas-serial + openblas-threads + openEuler-indexhtml + openEuler-logos + openEuler-release + OpenIPMI + OpenIPMI-devel + OpenIPMI-perl + open-iscsi + open-iscsi-help + open-isns-help + openjpeg2 + openjpeg2-help + openldap + openldap-clients + openldap-help + openldap-servers + opensc + opensc-help + openslp + openslp-help + openssh + openssh-askpass + openssh-clients + openssh-help + openssh-keycat + openssh-server + openssl + openssl-devel + openssl-help + openssl-pkcs11 + openvpn + openvpn-devel + openvpn-help + openvswitch + openvswitch-devel + opus + opus-help + ORBit2 + orc + orc-help + osinfo-db + osinfo-db-tools + osinfo-db-tools-help + os-prober + p11-kit + p11-kit-help + p11-kit-trust + pam + pam_cifscreds + pam_ssh_agent_auth + pam-help + parted + passwd + passwd-help + patch + patch-help + pciutils + pciutils-devel + pciutils-help + pcre + pcre2 + pcre2-help + pcre-devel + pcre-help + pcre-tools + pcsc-lite + pcsc-lite-help + perf + perl + perl-Compress-Raw-Bzip2 + perl-Compress-Raw-Bzip2-help + perl-Compress-Raw-Zlib + perl-Compress-Raw-Zlib-help + perl-DBD-MySQL + perl-DBD-MySQL-help + perl-DBD-SQLite + perl-DBD-SQLite-help + perl-devel + perl-Devel-PPPort + perl-Devel-PPPort-help + perl-ExtUtils-Install + perl-ExtUtils-Install-help + perl-ExtUtils-MakeMaker + perl-ExtUtils-MakeMaker-help + perl-ExtUtils-Manifest + perl-ExtUtils-Manifest-help + perl-ExtUtils-ParseXS + perl-ExtUtils-ParseXS-help + perl-Filter + perl-Filter-help + perl-Filter-Simple-help + perl-help + perl-IO-Compress + perl-IO-Compress-help + perl-List-MoreUtils + perl-List-MoreUtils-help + perl-List-MoreUtils-XS-help + perl-Net-Daemon + perl-Net-Daemon-help + perl-Test-Harness + perl-Test-Harness-help + perl-Thread-Queue + perl-Thread-Queue-help + perl-Time-HiRes + perl-Time-HiRes-help + perl-XML-Parser + perl-XML-Parser-help + perl-XML-Writer + perl-XML-Writer-help + pigz + pigz-help + pinentry + pinentry-help + pkcs11-helper + pkcs11-helper-devel + pkcs11-helper-help + pkgconf + pkgconf-help + plymouth + plymouth-help + policycoreutils + policycoreutils-help + polkit + polkit-help + polkit-libs + polkit-pkla-compat + polkit-pkla-compat-help + poppler-cpp + poppler-data + poppler-glib + poppler-help + popt + popt-devel + popt-help + postfix + postfix-help + ppp + ppp-help + pprof + procmail + procmail-help + procps-ng + procps-ng-devel + procps-ng-i18n + protobuf + protobuf-devel + protobuf-lite + protobuf-lite-devel + psmisc + publicsuffix-list + pulseaudio + pulseaudio-help + python3 + python3-aniso8601 + python3-click + python3-configobj + python3-dateutil + python3-dbus + python3-decorator + python3-devel + python3-dict2xml + python3-dmidecode + python3-dnf + python3-dnf-plugins-core + python3-ethtool + python3-firewall + python3-flask + python3-flask-restful + python3-gobject-base + python3-gpg + python3-hawkey + python3-i2c-tools + python3-iniparse + python3-inotify + python3-itsdangerous + python3-jinja2 + python3-joblib + python3-jsonpatch + python3-jsonpointer + python3-libcomps + python3-libdnf + python3-librepo + python3-libs + python3-libselinux + python3-libvirt + python3-libxml2 + python3-linux-procfs + python3-net-snmp + python3-newt + python3-numpy + python3-openipmi + python3-pandas + python3-perf + python3-pip + python3-pyatspi + python3-pycurl + python3-pyOpenSSL + python3-pyparsing + python3-pyudev + python3-pyxattr + python3-rpm + python3-rtslib + python3-schedutils + python3-scikit-learn + python3-scikit-optimize + python3-scipy + python3-setuptools + python3-six + python3-slip + python3-sssdconfig + python3-talloc + python3-unbound + python3-urlgrabber + python3-werkzeug + python3-xgboost + qemu + qemu-guest-agent + qemu-help + qemu-img + qpdf + qrencode + qrencode-help + quota + quota-help + rarian + rarian-help + rasdaemon + rdate + rdate-help + readline + readline-help + readonly-root + realmd + realmd-help + recode + recode-help + rootfiles + rpcbind + rpcbind-help + rpm + rpm-build-libs + rpm-cron + rpm-devel + rpmdevtools + rpmdevtools-help + rpm-help + rpm-libs + rpm-plugin-selinux + rpm-plugin-systemd-inhibit + rpmrebuild + rpmrebuild-help + rsync + rsync-help + rsyslog + rsyslog-crypto + rsyslog-elasticsearch + rsyslog-help + rsyslog-mmaudit + rsyslog-mmjsonparse + rsyslog-mmsnmptrapd + rsyslog-mysql + rsyslog-snmp + rsyslog-gnutls + rtkit + rtkit-help + samba-common-tools + samba-help + sbc + sbc-help + screen + screen-help + sdparm + sdparm-help + sed + sed-help + selinux-policy + selinux-policy-minimum + selinux-policy-sandbox + selinux-policy-targeted + sendmail + sendmail-help + setools-console + setools-help + setserial + setserial-help + setup + sg3_utils + sg3_utils-help + sgml-common + sgml-common-help + shadow-help + shadow + shared-mime-info + shared-mime-info-help + sharutils + sharutils-help + slang + slang-devel + slang-help + smartmontools + smartmontools-help + smp_utils + smp_utils-help + snappy + snappy-devel + snappy-help + source-highlight + source-highlight-help + speex + speex-help + sqlite + sqlite-help + squashfs-tools + squid + sssd + sssd-client + sssd-help + sssd-nfs-idmap + strace + strongswan + sudo + sudo-help + symlinks + syscontainer-tools + sysfsutils + sysfsutils-help + sysstat + systemd + systemd-devel + systemd-help + systemd-libs + systemd-pam + systemd-udev + systemtap-help + systemtap-sdt-devel + taglib + taglib-help + tar + tar-help + tcl + tcl-help + tcpdump + tcpdump-help + tcp_wrappers + tcp_wrappers-help + tcp_wrappers-libs + tcpdump + tcpdump-help + tcsh + tcsh-help + telepathy-filesystem + telepathy-glib + telepathy-logger + telepathy-logger-help + telnet + telnet-help + tftp + tftp-help + tftp-server + thin-provisioning-tools + thin-provisioning-tools-help + tigervnc + tigervnc-server-minimal + time + timedatex + timedatex-help + time-help + tipcutils + tipcutils-help + tk + tk-help + tmux + tmux-help + totem-pl-parser + totem-pl-parser-help + tpm2-abrmd + tpm2-abrmd-help + tpm2-tools + tpm2-tools-help + tpm2-tss + tpm2-tss-help + traceroute + traceroute-help + tree + tree-help + trousers + trousers-help + trousers-lib + tuned + tuned-help + tzdata + unbound-libs + unzip + unzip-help + upower + usbredir + usbredir-help + usbutils + usbutils-help + usermode + usermode-help + userspace-rcu + ustr + ustr-help + util-linux + vim-enhanced + vim-minimal + vino + vino-help + virt-what + virt-what-help + vsftpd + vsftpd-help + wget + wget-help + which + which-help + wqy-microhei-fonts + wqy-microhei-fonts-help + wqy-zenhei-fonts + xfsprogs + xfsprogs-help + xinetd + xinetd-help + xkeyboard-config + xkeyboard-config-help + xmlsec1-help + xmlsec1-openssl + xmlto + xmlto-help + xterm + xterm-help + xvattr + xvattr-help + xz + xz-devel + xz-help + xz-libs + xz-lzma-compat + ypbind + ypbind-help + ypserv + ypserv-help + yp-tools + yp-tools-help + yum + zip + zip-help + zlib + zlib-devel + zlib-help + zsh + zstd-help + zstd-devel + zziplib-help + zziplib-utils + unixODBC-devel + jemalloc-devel + DCF + + + grub2-efi-aa64 + grub2-efi-aa64-cdboot + grub2-efi-aa64-modules + + + grub2-pc + grub2-pc-modules + grub2-efi-x64 + + + grub2-efi-loongarch64 + grub2-efi-loongarch64-cdboot + grub2-efi-loongarch64-modules + + + grub2-common + grub2-tools-minimal + grub2-tools-extra + grub2-tools + grub2-help + lvm2-help + lvm2 + mdadm + mdadm-help + dosfstools-help + dosfstools + + -- Gitee From 276e46a88d32249b38900de005eb262d51808bc8 Mon Sep 17 00:00:00 2001 From: ouuleilei Date: Tue, 28 May 2024 10:43:31 +0800 Subject: [PATCH 06/10] add riscv64 support --- 0001-add-riscv64-support.patch | 2907 ++++++++++++++++++++++++++++++++ normal_riscv64.xml | 1569 +++++++++++++++++ oemaker.spec | 22 +- rpmlist_riscv64.xml | 1441 ++++++++++++++++ 4 files changed, 5938 insertions(+), 1 deletion(-) create mode 100644 0001-add-riscv64-support.patch create mode 100644 normal_riscv64.xml create mode 100644 rpmlist_riscv64.xml diff --git a/0001-add-riscv64-support.patch b/0001-add-riscv64-support.patch new file mode 100644 index 0000000..2abb994 --- /dev/null +++ b/0001-add-riscv64-support.patch @@ -0,0 +1,2907 @@ +From abe27c45365f98a01f3bef968f5e027e6da3b07c Mon Sep 17 00:00:00 2001 +From: ouuleilei +Date: Tue, 28 May 2024 10:35:17 +0800 +Subject: [PATCH] add riscv64 support + +--- + envmaker/config/compile_env_rpmlist.xml | 6 +- + envmaker/config/riscv64/openEuler_repo.conf | 17 + + isocut/config/riscv64/anaconda-ks.cfg | 371 ++++ + isocut/config/riscv64/rpmlist | 1 + + isocut/isocut.py | 7 + + .../config_files/riscv64/boot.msg | 5 + + .../config_files/riscv64/grub.conf | 13 + + .../config_files/riscv64/grub2-efi.cfg | 47 + + isomaker/80-openeuler/efi.tmpl | 14 +- + isomaker/80-openeuler/live/efi.tmpl | 4 + + isomaker/80-openeuler/live/riscv64.tmpl | 83 + + isomaker/80-openeuler/riscv64.tmpl | 76 + + isomaker/80-openeuler/runtime-cleanup.tmpl | 2 + + isomaker/80-openeuler/runtime-install.tmpl | 7 +- + isomaker/config/common/livecd/live/efi.tmpl | 5 + + isomaker/config/riscv64/desktop_normal.xml | 0 + isomaker/config/riscv64/edge_normal.xml | 0 + .../livecd/live/config_files/riscv64/boot.msg | 5 + + .../live/config_files/riscv64/grub.conf | 9 + + .../live/config_files/riscv64/grub2-efi.cfg | 38 + + .../config/riscv64/livecd/live/riscv64.tmpl | 75 + + .../config/riscv64/livecd/livecd_riscv64.ks | 70 + + isomaker/config/riscv64/livecd/rpmlist | 112 ++ + isomaker/config/riscv64/normal.xml | 1569 +++++++++++++++++ + isomaker/config/riscv64/standard.conf | 6 + + isomaker/init.sh | 2 +- + isomaker/iso.sh | 18 +- + 27 files changed, 2544 insertions(+), 18 deletions(-) + create mode 100644 envmaker/config/riscv64/openEuler_repo.conf + create mode 100644 isocut/config/riscv64/anaconda-ks.cfg + create mode 100644 isocut/config/riscv64/rpmlist + create mode 100644 isomaker/80-openeuler/config_files/riscv64/boot.msg + create mode 100644 isomaker/80-openeuler/config_files/riscv64/grub.conf + create mode 100644 isomaker/80-openeuler/config_files/riscv64/grub2-efi.cfg + create mode 100644 isomaker/80-openeuler/live/riscv64.tmpl + create mode 100644 isomaker/80-openeuler/riscv64.tmpl + create mode 100644 isomaker/config/riscv64/desktop_normal.xml + create mode 100644 isomaker/config/riscv64/edge_normal.xml + create mode 100644 isomaker/config/riscv64/livecd/live/config_files/riscv64/boot.msg + create mode 100644 isomaker/config/riscv64/livecd/live/config_files/riscv64/grub.conf + create mode 100644 isomaker/config/riscv64/livecd/live/config_files/riscv64/grub2-efi.cfg + create mode 100644 isomaker/config/riscv64/livecd/live/riscv64.tmpl + create mode 100644 isomaker/config/riscv64/livecd/livecd_riscv64.ks + create mode 100644 isomaker/config/riscv64/livecd/rpmlist + create mode 100644 isomaker/config/riscv64/normal.xml + create mode 100644 isomaker/config/riscv64/standard.conf + +diff --git a/envmaker/config/compile_env_rpmlist.xml b/envmaker/config/compile_env_rpmlist.xml +index d2461ea..eec1480 100644 +--- a/envmaker/config/compile_env_rpmlist.xml ++++ b/envmaker/config/compile_env_rpmlist.xml +@@ -17,6 +17,10 @@ + grub2-efi-x64-modules + + ++ ++ grub2-efi-riscv64-modules ++ ++ + + acl + acpica-tools +@@ -463,4 +467,4 @@ + clang + imageTailor + +- +\ No newline at end of file ++ +diff --git a/envmaker/config/riscv64/openEuler_repo.conf b/envmaker/config/riscv64/openEuler_repo.conf +new file mode 100644 +index 0000000..4bff406 +--- /dev/null ++++ b/envmaker/config/riscv64/openEuler_repo.conf +@@ -0,0 +1,17 @@ ++[main] ++debuglevel=2 ++gpgcheck=1 ++installonly_limit=3 ++clean_requirements_on_remove=True ++best=False ++skip_is_unavailable=False ++ ++ ++# This is the default, if you make this bigger yum won't see if the metadata ++ ++#in /etc/yum.repos.d ++[openEuler] ++name=openEuler ++baseurl=https://repo.openeuler.org/openEuler-23.09/OS/riscv64/ ++enabled=1 ++gpgcheck=0 +diff --git a/isocut/config/riscv64/anaconda-ks.cfg b/isocut/config/riscv64/anaconda-ks.cfg +new file mode 100644 +index 0000000..adcb6fe +--- /dev/null ++++ b/isocut/config/riscv64/anaconda-ks.cfg +@@ -0,0 +1,371 @@ ++#version=DEVEL ++# Use CDROM installation media ++cdrom ++# Use graphical install ++graphical ++# Run the Setup Agent on first boot ++firstboot --enable ++ignoredisk --only-use=sda ++# Keyboard layouts ++keyboard --vckeymap=us --xlayouts='us' ++# System language ++lang en_US.UTF-8 ++ ++# Network information ++network --bootproto=dhcp --device=ens3 --onboot=off --ipv6=auto ++network --hostname=localhost.localdomain ++ ++# Root password ++rootpw --iscrypted $6$xcWWTkm29Zd5V8hv$MrbjVgQ.BCaRXoTGcpq2snPnGx36HUuC7uqH0IEMV3QQXDT6lacPX32Zwdn3yeq4aywymTlaO6anqzZ8tnKFA1 ++# System timezone ++timezone Asia/Beijing --isUtc ++# Reboot after install ++reboot ++# System bootloader configuration ++bootloader --append=" net.ifnames=0 biosdevname=0" --location=mbr --boot-drive=sda ++autopart --type=lvm ++# Partition clearing information ++clearpart --all --initlabel --drives=sda ++ ++%packages --multilib --ignoremissing ++acl.riscv64 ++aide.riscv64 ++audit-libs.riscv64 ++audit.riscv64 ++autogen-libopts.riscv64 ++avahi-libs.riscv64 ++basesystem.noarch ++bash.riscv64 ++bind-libs-lite.riscv64 ++bind-libs.riscv64 ++bind-utils.riscv64 ++blktrace.riscv64 ++bridge-utils.riscv64 ++bzip2-libs.riscv64 ++bzip2.riscv64 ++chkconfig.riscv64 ++cifs-utils.riscv64 ++coreutils.riscv64 ++cpio.riscv64 ++cracklib-dicts.riscv64 ++cracklib.riscv64 ++cronie-anacron.riscv64 ++cronie.riscv64 ++crontabs.noarch ++cryptsetup-libs.riscv64 ++cups-libs.riscv64 ++curl.riscv64 ++cyrus-sasl-lib.riscv64 ++dbus-glib.riscv64 ++dbus-libs.riscv64 ++dbus.riscv64 ++deltarpm.riscv64 ++device-mapper-event-libs.riscv64 ++device-mapper-event.riscv64 ++device-mapper-libs.riscv64 ++device-mapper-persistent-data.riscv64 ++device-mapper.riscv64 ++dhcp-libs.riscv64 ++diffutils.riscv64 ++dmidecode.riscv64 ++dos2unix.riscv64 ++dracut-network.riscv64 ++dracut.riscv64 ++dump_mem_tool.riscv64 ++e2fsprogs-libs.riscv64 ++e2fsprogs.riscv64 ++elfutils-libelf.riscv64 ++elfutils-libs.riscv64 ++ethtool.riscv64 ++openEuler-release.riscv64 ++expat-devel.riscv64 ++expat.riscv64 ++expect.riscv64 ++file-libs.riscv64 ++filesystem.riscv64 ++file.riscv64 ++findutils.riscv64 ++fipscheck-lib.riscv64 ++fipscheck.riscv64 ++freetype.riscv64 ++fuse.riscv64 ++gawk.riscv64 ++gdbm.riscv64 ++genisoimage.riscv64 ++gettext-libs.riscv64 ++gettext.riscv64 ++glib2.riscv64 ++glibc-common.riscv64 ++glibc.riscv64 ++gmp.riscv64 ++gnupg2.riscv64 ++gobject-introspection.riscv64 ++gpgme.riscv64 ++gpm-libs.riscv64 ++grep.riscv64 ++grub2-tools.riscv64 ++grubby.riscv64 ++gssproxy.riscv64 ++gzip.riscv64 ++hardlink.riscv64 ++hdparm.riscv64 ++hostname.riscv64 ++hwdata.noarch ++info.riscv64 ++initscripts.riscv64 ++iotop.noarch ++ipmitool.riscv64 ++iproute.riscv64 ++iptables.riscv64 ++iputils.riscv64 ++irqbalance.riscv64 ++json-c.riscv64 ++kbox-kmod.riscv64 ++kernel-tools-libs.riscv64 ++kernel-tools.riscv64 ++kernel.riscv64 ++kexec-tools.riscv64 ++keyutils-libs.riscv64 ++keyutils.riscv64 ++kmod-libs.riscv64 ++kmod.riscv64 ++kpartx.riscv64 ++kpatch-runtime.noarch ++krb5-libs.riscv64 ++less.riscv64 ++libacl.riscv64 ++libaio.riscv64 ++libalarm.riscv64 ++libassuan.riscv64 ++libattr.riscv64 ++libbasicobjects.riscv64 ++libblkid.riscv64 ++libcap-ng.riscv64 ++libcap.riscv64 ++libcgroup-tools.riscv64 ++libcgroup.riscv64 ++libcollection.riscv64 ++libcom_err.riscv64 ++libcroco.riscv64 ++libcurl.riscv64 ++libdb-utils.riscv64 ++libdb.riscv64 ++libedit.riscv64 ++libestr.riscv64 ++libevent.riscv64 ++libffi.riscv64 ++libgcc.riscv64 ++libgcrypt.riscv64 ++libgomp.riscv64 ++libgpg-error.riscv64 ++libidn.riscv64 ++libini_config.riscv64 ++libldb.riscv64 ++libmnl.riscv64 ++libmount.riscv64 ++libnetfilter_conntrack.riscv64 ++libnfnetlink.riscv64 ++libnfsidmap.riscv64 ++libpath_utils.riscv64 ++libpcap.riscv64 ++libpciaccess.riscv64 ++libpwquality.riscv64 ++libref_array.riscv64 ++libsecurec.riscv64 ++libselinux.riscv64 ++libsemanage.riscv64 ++libsepol.riscv64 ++libssh2.riscv64 ++libss.riscv64 ++libstdc++.riscv64 ++libsysfs.riscv64 ++libtalloc.riscv64 ++libtasn1.riscv64 ++libtdb.riscv64 ++libtevent.riscv64 ++libtirpc.riscv64 ++libunistring.riscv64 ++libusal.riscv64 ++libuser.riscv64 ++libutempter.riscv64 ++libuuid.riscv64 ++libverto.riscv64 ++libwbclient.riscv64 ++libxml2.riscv64 ++libxslt.riscv64 ++linux-firmware.noarch ++lm_sensors-libs.riscv64 ++logrotate.riscv64 ++lsof.riscv64 ++lsscsi.riscv64 ++lua.riscv64 ++lvm2-libs.riscv64 ++lvm2.riscv64 ++lzo.riscv64 ++mailcap.noarch ++mailx.riscv64 ++man-db.riscv64 ++mtools.riscv64 ++ncurses-base.noarch ++ncurses-libs.riscv64 ++ncurses.riscv64 ++net-snmp-libs.riscv64 ++net-tools.riscv64 ++nfs-utils.riscv64 ++nscd.riscv64 ++nspr.riscv64 ++nss-softokn-freebl.riscv64 ++nss-softokn.riscv64 ++nss-sysinit.riscv64 ++nss-tools.riscv64 ++nss-util.riscv64 ++nss.riscv64 ++ntpdate.riscv64 ++numactl-libs.riscv64 ++numactl.riscv64 ++numad.riscv64 ++OpenIPMI-libs.riscv64 ++OpenIPMI.riscv64 ++openldap.riscv64 ++openssh-clients.riscv64 ++openssh-server.riscv64 ++openssh.riscv64 ++openssl-libs.riscv64 ++openssl.riscv64 ++p11-kit-trust.riscv64 ++p11-kit.riscv64 ++pam.riscv64 ++parted.riscv64 ++passwd.riscv64 ++pciutils-libs.riscv64 ++pciutils.riscv64 ++pcre.riscv64 ++perl-Business-ISBN-Data.noarch ++perl-Business-ISBN.noarch ++perl-Carp.noarch ++perl-Compress-Raw-Bzip2.riscv64 ++perl-Compress-Raw-Zlib.riscv64 ++perl-Config-IniFiles.noarch ++perl-constant.noarch ++perl-Data-Dumper.riscv64 ++perl-DBD-SQLite.riscv64 ++perl-DBI.riscv64 ++perl-Digest-MD5.riscv64 ++perl-Digest.noarch ++perl-Digest-SHA.riscv64 ++perl-Encode-Locale.noarch ++perl-Encode.riscv64 ++perl-Exporter.noarch ++perl-File-Listing.noarch ++perl-File-Path.noarch ++perl-File-Temp.noarch ++perl-Filter.riscv64 ++perl-Getopt-Long.noarch ++perl-HTML-Parser.riscv64 ++perl-HTML-Tagset.noarch ++perl-HTTP-Cookies.noarch ++perl-HTTP-Daemon.noarch ++perl-HTTP-Date.noarch ++perl-HTTP-Message.noarch ++perl-HTTP-Negotiate.noarch ++perl-HTTP-Tiny.noarch ++perl-IO-Compress.noarch ++perl-IO-HTML.noarch ++perl-IO-Socket-IP.noarch ++perl-IO-Socket-SSL.noarch ++perl-libs.riscv64 ++perl-libwww-perl.noarch ++perl-List-MoreUtils.noarch ++perl-LWP-MediaTypes.noarch ++perl-macros.riscv64 ++perl-Net-Daemon.noarch ++perl-Net-HTTP.noarch ++perl-Net-LibIDN.riscv64 ++perl-Net-SSLeay.riscv64 ++perl-parent.noarch ++perl-PathTools.riscv64 ++perl-Pod-Escapes.noarch ++perl-podlators.noarch ++perl-Pod-Perldoc.noarch ++perl-Pod-Simple.noarch ++perl-Pod-Usage.noarch ++perl-Scalar-List-Utils.riscv64 ++perl-Socket.riscv64 ++perl-Storable.riscv64 ++perl-Text-ParseWords.noarch ++perl-threads-shared.riscv64 ++perl-threads.riscv64 ++perl-TimeDate.noarch ++perl-Time-HiRes.riscv64 ++perl-Time-Local.noarch ++perl-URI.noarch ++perl-WWW-RobotRules.noarch ++perl.riscv64 ++perl-XML-LibXML.riscv64 ++perl-XML-NamespaceSupport.noarch ++perl-XML-SAX-Base.noarch ++perl-XML-SAX.noarch ++pinentry.riscv64 ++popt.riscv64 ++procps-ng.riscv64 ++psmisc.riscv64 ++qrencode-libs.riscv64 ++quota-nls.noarch ++quota.riscv64 ++rasdaemon.riscv64 ++readline.riscv64 ++rootfiles.noarch ++rpcbind.riscv64 ++rpm-build-libs.riscv64 ++rpm-libs.riscv64 ++rpm.riscv64 ++rsync.riscv64 ++rsyslog.riscv64 ++samba-libs.riscv64 ++screen.riscv64 ++security-tool.riscv64 ++sed.riscv64 ++setup.noarch ++shadow-utils.riscv64 ++smartmontools.riscv64 ++sqlite.riscv64 ++squashfs-tools.riscv64 ++sudo.riscv64 ++sysfsutils.riscv64 ++sysmonitor-kmod.riscv64 ++sysstat.riscv64 ++systemd-libs.riscv64 ++systemd.riscv64 ++tar.riscv64 ++tcp_wrappers-libs.riscv64 ++tcp_wrappers.riscv64 ++teamd.riscv64 ++tuned.noarch ++tzdata.noarch ++unzip.riscv64 ++util-linux.riscv64 ++vim-common.riscv64 ++vim-enhanced.riscv64 ++vim-filesystem.noarch ++vim-minimal.riscv64 ++virt-what.riscv64 ++wget.riscv64 ++which.riscv64 ++xfsprogs.riscv64 ++xz-libs.riscv64 ++xz.riscv64 ++zip.riscv64 ++zlib.riscv64 ++dnf.noarch ++dnf-utils.noarch ++authselect.riscv64 ++authselect-libs.riscv64 ++grub2-efi-riscv64.riscv64 ++grub2-efi-riscv64-cdboot.riscv64 ++grub2-common.noarch ++grub2-tools.riscv64 ++openEuler-logos.noarch ++network-scripts.riscv64 ++NetworkManager.riscv64 ++ ++%end +diff --git a/isocut/config/riscv64/rpmlist b/isocut/config/riscv64/rpmlist +new file mode 100644 +index 0000000..b134835 +--- /dev/null ++++ b/isocut/config/riscv64/rpmlist +@@ -0,0 +1 @@ ++kernel.riscv64 +diff --git a/isocut/isocut.py b/isocut/isocut.py +index 8578f83..be836ff 100755 +--- a/isocut/isocut.py ++++ b/isocut/isocut.py +@@ -442,6 +442,8 @@ def regen_repodata(): + pack.text = pack.text.split(".aarch64")[0] + elif os.uname()[-1].strip() == 'loongarch64': + pack.text = pack.text.split(".loongarch64")[0] ++ elif os.uname()[-1].strip() == 'riscv64': ++ pack.text = pack.text.split(".riscv64")[0] + pack.text = pack.text.split(".noarch")[0] + fp_rpm.close() + +@@ -687,6 +689,11 @@ def remake_iso(): + "-joliet-long -allow-multidot -allow-leading-dots -no-bak -V \"%s\" " \ + "-o \"%s\" -e images/efiboot.img -no-emul-boot \"%s\"" % ( + ICONFIG.new_iso_name, ICONFIG.dest_iso, ICONFIG.temp_path_new_image) ++ elif ICONFIG.src_iso_arch == 'riscv64': ++ make_iso_cmd = "genisoimage -R -J -T -r -l -d -input-charset utf-8 " \ ++ "-joliet-long -allow-multidot -allow-leading-dots -no-bak -V \"%s\" " \ ++ "-o \"%s\" -e images/efiboot.img -no-emul-boot \"%s\"" % ( ++ ICONFIG.new_iso_name, ICONFIG.dest_iso, ICONFIG.temp_path_new_image) + dest_iso_path = os.path.dirname(ICONFIG.dest_iso) + if not (dest_iso_path is None or dest_iso_path == + "") and not os.path.exists(dest_iso_path): +diff --git a/isomaker/80-openeuler/config_files/riscv64/boot.msg b/isomaker/80-openeuler/config_files/riscv64/boot.msg +new file mode 100644 +index 0000000..ff54899 +--- /dev/null ++++ b/isomaker/80-openeuler/config_files/riscv64/boot.msg +@@ -0,0 +1,5 @@ ++ ++splash.lss ++ ++ - Press the 0107 key to begin the installation process. ++ +diff --git a/isomaker/80-openeuler/config_files/riscv64/grub.conf b/isomaker/80-openeuler/config_files/riscv64/grub.conf +new file mode 100644 +index 0000000..49fa32b +--- /dev/null ++++ b/isomaker/80-openeuler/config_files/riscv64/grub.conf +@@ -0,0 +1,13 @@ ++#debug --graphics ++default=0 ++splashimage=@SPLASHPATH@ ++timeout 5 ++hiddenmenu ++title Install @PRODUCT@ @VERSION@ ++ findiso ++ kernel @KERNELPATH@ @ROOT@ quiet ++ initrd @INITRDPATH@ ++title Test this media & install @PRODUCT@ @VERSION@ ++ findiso ++ kernel @KERNELPATH@ @ROOT@ rd.live.check quiet ++ initrd @INITRDPATH@ +diff --git a/isomaker/80-openeuler/config_files/riscv64/grub2-efi.cfg b/isomaker/80-openeuler/config_files/riscv64/grub2-efi.cfg +new file mode 100644 +index 0000000..918b7d3 +--- /dev/null ++++ b/isomaker/80-openeuler/config_files/riscv64/grub2-efi.cfg +@@ -0,0 +1,47 @@ ++set default="1" ++ ++function load_video { ++ if [ x$feature_all_video_module = xy ]; then ++ insmod all_video ++ else ++ insmod efi_gop ++ insmod efi_uga ++ insmod ieee1275_fb ++ insmod vbe ++ insmod vga ++ insmod video_bochs ++ insmod video_cirrus ++ fi ++} ++ ++load_video ++set gfxpayload=keep ++insmod gzio ++insmod part_gpt ++insmod ext2 ++ ++set timeout=60 ++set debug="linux,loader,mm" ++### END /etc/grub.d/00_header ### ++ ++search --no-floppy --set=root -l '@ISOLABEL@' ++ ++### BEGIN /etc/grub.d/10_linux ### ++menuentry 'Install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ ro inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ ++} ++menuentry 'Test this media & install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ rd.live.check inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ ++} ++submenu 'Troubleshooting -->' { ++ menuentry 'Install @PRODUCT@ @VERSION@ in basic graphics mode' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ nomodeset inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ ++ } ++ menuentry 'Rescue the @PRODUCT@ system' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ rescue systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ ++ } ++} +diff --git a/isomaker/80-openeuler/efi.tmpl b/isomaker/80-openeuler/efi.tmpl +index 0b5e770..29a61d4 100644 +--- a/isomaker/80-openeuler/efi.tmpl ++++ b/isomaker/80-openeuler/efi.tmpl +@@ -5,7 +5,14 @@ EFIBOOTDIR="EFI/BOOT" + + mkdir ${EFIBOOTDIR} + mkdir ${EFIBOOTDIR}/fonts/ +-%if efiarch64 != 'LOONGARCH64': ++%if efiarch64 == 'LOONGARCH64': ++install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI ++install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOTLOONGARCH.EFI ++install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi ++%elif efiarch64 == 'RISCV64': ++install boot/efi/EFI/openEuler/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI ++install boot/efi/EFI/openEuler/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.EFI ++%else: + install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI + install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ + install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi +@@ -15,11 +22,6 @@ install boot/efi/EFI/*/shim${efiarch32|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch32} + install boot/efi/EFI/*/mm${efiarch32|lower}.efi ${EFIBOOTDIR}/ + install boot/efi/EFI/*/gcd${efiarch32|lower}.efi ${EFIBOOTDIR}/grub${efiarch32|lower}.efi + %endif +-%if efiarch64 == 'LOONGARCH64': +-install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI +-install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOTLOONGARCH.EFI +-install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi +-%endif + install boot/efi/EFI/*/fonts/unicode.pf2 ${EFIBOOTDIR}/fonts/ + + ## actually make the EFI images +diff --git a/isomaker/80-openeuler/live/efi.tmpl b/isomaker/80-openeuler/live/efi.tmpl +index 79f6444..1fa7bf6 100644 +--- a/isomaker/80-openeuler/live/efi.tmpl ++++ b/isomaker/80-openeuler/live/efi.tmpl +@@ -6,6 +6,10 @@ EFIBOOTDIR="EFI/BOOT" + mkdir ${EFIBOOTDIR} + mkdir ${EFIBOOTDIR}/fonts/ + %if efiarch64: ++%if efiarch64 == 'RISCV64': ++install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI ++install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.EFI ++%else: + install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI + install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ + install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi +diff --git a/isomaker/80-openeuler/live/riscv64.tmpl b/isomaker/80-openeuler/live/riscv64.tmpl +new file mode 100644 +index 0000000..1944e5a +--- /dev/null ++++ b/isomaker/80-openeuler/live/riscv64.tmpl +@@ -0,0 +1,83 @@ ++<%page args="kernels, runtime_img, basearch, inroot, outroot, product, isolabel"/> ++<% ++configdir="tmp/config_files/riscv64" ++PXEBOOTDIR="images/pxeboot" ++KERNELDIR=PXEBOOTDIR ++LIVEDIR="LiveOS" ++LORAXDIR="usr/share/lorax/" ++ ++## Don't allow spaces or escape characters in the iso label ++def valid_label(ch): ++ return ch.isalnum() or ch == '_' ++ ++isolabel = ''.join(ch if valid_label(ch) else '-' for ch in isolabel) ++ ++from os.path import basename ++%> ++ ++## Test ${runtime_img} to see if udf is needed ++<% ++ import os ++ from pylorax.sysutils import joinpaths ++ if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3: ++ udfargs = "-allow-limited-size" ++ else: ++ udfargs = "" ++%> ++ ++mkdir ${LIVEDIR} ++install ${runtime_img} ${LIVEDIR}/squashfs.img ++treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img ++ ++## install kernels ++mkdir ${KERNELDIR} ++%for kernel in kernels: ++ ## normal riscv64 ++ installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz ++ installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img ++%endfor ++ ++#FIXME: this will need adjusted when we have a real bootloader. ++## WHeeeeeeee, EFI. ++## We could remove the basearch restriction someday.. ++<% efiargs=""; efigraft="" %> ++%if exists("boot/efi/EFI/*/gcdriscv64.efi"): ++ <% ++ efiarch32 = None ++ efiarch64 = 'RISCV64' ++ efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot) ++ images = ["images/efiboot.img"] ++ %> ++ %for img in images: ++ <% ++ efiargs += " -eltorito-alt-boot -e {0} -no-emul-boot".format(img) ++ efigraft += " {0}={1}/{0}".format(img,outroot) ++ %> ++ treeinfo images-${basearch} ${img|basename} ${img} ++ %endfor ++ <%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=efiarch32, efiarch64=efiarch64, isolabel=isolabel"/> ++%endif ++ ++# Create optional product.img and updates.img ++<% filegraft=""; images=["product", "updates"] %> ++%for img in images: ++ %if exists("%s/%s/" % (LORAXDIR, img)): ++ installimg ${LORAXDIR}/${img}/ images/${img}.img ++ treeinfo images-${basearch} ${img}.img images/${img}.img ++ <% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> ++ %endif ++%endfor ++ ++# Inherit iso-graft/ if it exists from external templates ++<% ++ import os ++ if os.path.exists(workdir + "/iso-graft"): ++ filegraft += " " + workdir + "/iso-graft" ++%> ++ ++# Add the license files ++%for f in glob("/usr/share/licenses/*-release/*"): ++ install ${f} ${f|basename} ++ <% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %> ++%endfor ++ +diff --git a/isomaker/80-openeuler/riscv64.tmpl b/isomaker/80-openeuler/riscv64.tmpl +new file mode 100644 +index 0000000..be9d81c +--- /dev/null ++++ b/isomaker/80-openeuler/riscv64.tmpl +@@ -0,0 +1,76 @@ ++<%page args="kernels, runtime_img, basearch, inroot, outroot, product, isolabel"/> ++<% ++configdir="tmp/config_files/riscv64" ++PXEBOOTDIR="images/pxeboot" ++KERNELDIR=PXEBOOTDIR ++STAGE2IMG="images/install.img" ++LORAXDIR="usr/share/lorax/" ++ ++from os.path import basename ++%> ++ ++## Test ${runtime_img} to see if udf is needed ++<% ++ import os ++ from pylorax.sysutils import joinpaths ++ if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3: ++ udfargs = "-allow-limited-size" ++ else: ++ udfargs = "" ++%> ++ ++mkdir images ++install ${runtime_img} ${STAGE2IMG} ++treeinfo stage2 mainimage ${STAGE2IMG} ++ ++## install kernels ++mkdir ${KERNELDIR} ++%for kernel in kernels: ++ ## normal riscv64 ++ installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz ++ installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img ++%endfor ++ ++#FIXME: this will need adjusted when we have a real bootloader. ++## WHeeeeeeee, EFI. ++## We could remove the basearch restriction someday.. ++<% efiargs=""; efigraft="";efiarch64=None %> ++%if exists("boot/efi/EFI/*/gcdriscv64.efi"): ++ <% ++ efiarch64 = 'RISCV64' ++ efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot) ++ images = ["images/efiboot.img"] ++ %> ++ %for img in images: ++ <% ++ efiargs += " -eltorito-alt-boot -e {0} -no-emul-boot".format(img) ++ efigraft += " {0}={1}/{0}".format(img,outroot) ++ %> ++ treeinfo images-${basearch} ${img|basename} ${img} ++ %endfor ++ <%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=efiarch32, efiarch64=efiarch64, isolabel=isolabel"/> ++%endif ++ ++# Create optional product.img and updates.img ++<% filegraft=""; images=["product", "updates"] %> ++%for img in images: ++ %if exists("%s/%s/" % (LORAXDIR, img)): ++ installimg ${LORAXDIR}/${img}/ images/${img}.img ++ treeinfo images-${basearch} ${img}.img images/${img}.img ++ <% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> ++ %endif ++%endfor ++ ++# Inherit iso-graft/ if it exists from external templates ++<% ++ import os ++ if os.path.exists(workdir + "/iso-graft"): ++ filegraft += " " + workdir + "/iso-graft" ++%> ++ ++# Add the license files ++%for f in glob("/usr/share/licenses/*-release/*"): ++ install ${f} ${f|basename} ++ <% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %> ++%endfor ++ +diff --git a/isomaker/80-openeuler/runtime-cleanup.tmpl b/isomaker/80-openeuler/runtime-cleanup.tmpl +index 256d013..898f9c7 100644 +--- a/isomaker/80-openeuler/runtime-cleanup.tmpl ++++ b/isomaker/80-openeuler/runtime-cleanup.tmpl +@@ -337,8 +337,10 @@ runcmd chroot ${root} find /boot \! -name "vmlinuz*" \ + ## (broken systemd service links lead to confusing noise at boot) + ## NOTE: not checking /var because we want to keep /var/run + ## NOTE: Excluding /etc/mtab which links to /proc/self/mounts for systemd ++%if basearch != 'riscv64': + runcmd chroot ${root} find -L /etc /usr -xdev -type l -and \! -name "mtab" \ + -printf "removing broken symbolic link %p -> %l\n" -delete ++%endif + + ## Clean up some of the mess pulled in by webkitgtk via yelp + ## libwebkit2gtk links to a handful of libraries in gstreamer and +diff --git a/isomaker/80-openeuler/runtime-install.tmpl b/isomaker/80-openeuler/runtime-install.tmpl +index 9937e70..f38e5eb 100644 +--- a/isomaker/80-openeuler/runtime-install.tmpl ++++ b/isomaker/80-openeuler/runtime-install.tmpl +@@ -52,6 +52,11 @@ installpkg glibc-all-langpacks + installpkg grub2-efi-loongarch64 grub2-efi-loongarch64-cdboot grub2-efi-loongarch64-modules + installpkg grub2-tools grub2-tools-minimal grub2-tools-extra + %endif ++%if basearch == "riscv64": ++ installpkg efibootmgr ++ installpkg grub2-efi-riscv64 grub2-efi-riscv64-cdboot grub2-efi-riscv64-modules ++ installpkg grub2-tools grub2-tools-minimal grub2-tools-extra ++%endif + + ## yay, plymouth + installpkg plymouth +@@ -117,7 +122,7 @@ installpkg pciutils usbutils ipmitool + installpkg smartmontools + installpkg hdparm + ## see bug #1483278 +-%if basearch not in ("arm", "armhfp", "loongarch64"): ++%if basearch not in ("arm", "armhfp", "loongarch64", "riscv64"): + installpkg libmlx4 rdma-core + %endif + installpkg rng-tools +diff --git a/isomaker/config/common/livecd/live/efi.tmpl b/isomaker/config/common/livecd/live/efi.tmpl +index 9a57df4..abe9526 100644 +--- a/isomaker/config/common/livecd/live/efi.tmpl ++++ b/isomaker/config/common/livecd/live/efi.tmpl +@@ -11,10 +11,15 @@ mkdir ${EFIBOOTDIR}/fonts/ + install usr/share/shim/lockdown.efi ${EFIBOOTDIR}/ + %endif + %if efiarch64: ++%if efiarch64 == 'RISCV64': ++install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI ++install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64}.EFI ++%else + install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI + install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ + install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi + %endif ++%endif + install boot/efi/EFI/*/fonts/unicode.pf2 ${EFIBOOTDIR}/fonts/ + + ## actually make the EFI images +diff --git a/isomaker/config/riscv64/desktop_normal.xml b/isomaker/config/riscv64/desktop_normal.xml +new file mode 100644 +index 0000000..e69de29 +diff --git a/isomaker/config/riscv64/edge_normal.xml b/isomaker/config/riscv64/edge_normal.xml +new file mode 100644 +index 0000000..e69de29 +diff --git a/isomaker/config/riscv64/livecd/live/config_files/riscv64/boot.msg b/isomaker/config/riscv64/livecd/live/config_files/riscv64/boot.msg +new file mode 100644 +index 0000000..ff54899 +--- /dev/null ++++ b/isomaker/config/riscv64/livecd/live/config_files/riscv64/boot.msg +@@ -0,0 +1,5 @@ ++ ++splash.lss ++ ++ - Press the 0107 key to begin the installation process. ++ +diff --git a/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub.conf b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub.conf +new file mode 100644 +index 0000000..7e5e934 +--- /dev/null ++++ b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub.conf +@@ -0,0 +1,9 @@ ++#debug --graphics ++default=0 ++splashimage=@SPLASHPATH@ ++timeout 60 ++hiddenmenu ++title Start @PRODUCT@ @VERSION@ ++ findiso ++ kernel @KERNELPATH@ @ROOT@ quiet inst.text rd.live.ram net.ifnames=0 biosdevname=0 rd.shell=0 ++ initrd @INITRDPATH@ +diff --git a/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub2-efi.cfg b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub2-efi.cfg +new file mode 100644 +index 0000000..aa36684 +--- /dev/null ++++ b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub2-efi.cfg +@@ -0,0 +1,38 @@ ++set default="0" ++ ++function load_video { ++ if [ x$feature_all_video_module = xy ]; then ++ insmod all_video ++ else ++ insmod efi_gop ++ insmod efi_uga ++ insmod ieee1275_fb ++ insmod vbe ++ insmod vga ++ insmod video_bochs ++ insmod video_cirrus ++ fi ++} ++ ++load_video ++set gfxpayload=keep ++insmod gzio ++insmod part_gpt ++insmod ext2 ++ ++set timeout=60 ++### END /etc/grub.d/00_header ### ++ ++search --no-floppy --set=root -l '@ISOLABEL@' ++ ++### BEGIN /etc/grub.d/10_linux ### ++menuentry 'Start @PRODUCT@ @VERSION@ with text mode' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ ro inst.text console=ttyS0 console=tty0 rd.live.ram net.ifnames=0 biosdevname=0 rd.shell=0 ++ initrd @INITRDPATH@ ++} ++submenu 'Troubleshooting -->' { ++ menuentry 'Rescue a @PRODUCT@ system' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ rescue console=ttyS0 console=tty0 rd.live.ram net.ifnames=0 biosdevname=0 rd.shell=0 ++ initrd @INITRDPATH@ ++ } ++} +diff --git a/isomaker/config/riscv64/livecd/live/riscv64.tmpl b/isomaker/config/riscv64/livecd/live/riscv64.tmpl +new file mode 100644 +index 0000000..e7a9309 +--- /dev/null ++++ b/isomaker/config/riscv64/livecd/live/riscv64.tmpl +@@ -0,0 +1,75 @@ ++<%page args="kernels, runtime_img, basearch, inroot, outroot, product, isolabel"/> ++<% ++configdir="tmp/config_files/riscv64" ++PXEBOOTDIR="images/pxeboot" ++KERNELDIR=PXEBOOTDIR ++LORAXDIR="usr/share/lorax/" ++LIVEDIR="LiveOS" ++ ++ ++from os.path import basename ++%> ++ ++## Test ${runtime_img} to see if udf is needed ++<% ++ import os ++ from pylorax.sysutils import joinpaths ++ if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3: ++ udfargs = "-allow-limited-size" ++ else: ++ udfargs = "" ++%> ++mkdir ${LIVEDIR} ++install ${runtime_img} ${LIVEDIR}/squashfs.img ++treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img ++ ++ ++## install kernels ++mkdir ${KERNELDIR} ++%for kernel in kernels: ++ ## normal riscv64 ++ installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz ++ installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img ++%endfor ++ ++ ++## WHeeeeeeee, EFI. ++## We could remove the basearch restriction someday.. ++<% efiargs=""; efigraft="" %> ++%if exists("boot/efi/EFI/*/gcdriscv64.efi"): ++ <% ++ efiarch32 = None ++ efiarch64 = 'RISCV64' ++ efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot) ++ images = ["images/efiboot.img"] ++ %> ++ %for img in images: ++ <% ++ efiargs += " -eltorito-alt-boot -e {0} -no-emul-boot".format(img) ++ efigraft += " {0}={1}/{0}".format(img,outroot) ++ %> ++ treeinfo images-${basearch} ${img|basename} ${img} ++ %endfor ++ <%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=efiarch32, efiarch64=efiarch64, isolabel=isolabel"/> ++%endif ++ ++# Create optional product.img and updates.img ++<% filegraft=""; images=["product", "updates"] %> ++%for img in images: ++ %if exists("%s/%s/" % (LORAXDIR, img)): ++ installimg ${LORAXDIR}/${img}/ images/${img}.img ++ treeinfo images-${basearch} ${img}.img images/${img}.img ++ <% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> ++ %endif ++%endfor ++ ++%if exists("boot/efi/EFI/*/gcdriscv64.efi"): ++## make boot.iso ++runcmd mkisofs -o ${outroot}/images/boot.iso \ ++ ${efiargs} -R -J -V '${isolabel}' -T ${udfargs} \ ++ -graft-points \ ++ ${KERNELDIR}=${outroot}/${KERNELDIR} \ ++ ${LIVEDIR}=${outroot}/${LIVEDIR} \ ++ ${efigraft} ${filegraft} ++treeinfo images-${basearch} boot.iso images/boot.iso ++%endif +diff --git a/isomaker/config/riscv64/livecd/livecd_riscv64.ks b/isomaker/config/riscv64/livecd/livecd_riscv64.ks +new file mode 100644 +index 0000000..192c4b1 +--- /dev/null ++++ b/isomaker/config/riscv64/livecd/livecd_riscv64.ks +@@ -0,0 +1,70 @@ ++# Minimal Disk Image ++# ++# Firewall configuration ++firewall --enabled ++# Use network installation ++url --url="INSTALL_REPO" ++# Root password ++rootpw --iscrypted ROOT_PWD ++ ++# Network information ++network --bootproto=dhcp --onboot=on --activate ++# System keyboard ++keyboard --xlayouts=us --vckeymap=us ++# System language ++lang en_US.UTF-8 ++# SELinux configuration ++selinux --enforcing ++# Installation logging level ++logging --level=info ++# Shutdown after installation ++shutdown ++# System timezone ++timezone Asia/Beijing ++# System bootloader configuration ++bootloader --location=mbr ++# Clear the Master Boot Record ++zerombr ++# Partition clearing information ++clearpart --all ++# Disk partitioning information ++part / --fstype="ext4" --size=40000 ++part swap --size=1000 ++%pre ++#!/bin/bash ++mkdir -p /mnt/sysimage/usr/lib64/ ++chmod 0755 /mnt/sysimage/usr/lib64/ ++cp /usr/lib64/libbep_env.so /mnt/sysimage/usr/lib64 ++%end ++%post ++ ++touch /etc/sysconfig/network ++ ++cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0 ++TYPE=Ethernet ++BOOTPROTO=dhcp ++NAME=eth0 ++DEVICE=eth0 ++ONBOOT=yes ++EOF ++ ++rm -rf /etc/systemd/system/multi-user.target.wants/kbox.service ++rm -rf /etc/systemd/system/multi-user.target.wants/kdump.service ++rm -rf /usr/lib/systemd/system/kbox.service ++rm -rf /usr/lib/systemd/system/kdump.service ++rm -rf /boot/initramfs* ++ ++#fix shadows and shadows- time field ++awk 'BEGIN{FS=OFS=":"} {$3=18099; print $0 > "/etc/shadow"}' /etc/shadow; ++awk 'BEGIN{FS=OFS=":"} {$3=18099; print $0 > "/etc/shadow-"}' /etc/shadow-; ++ ++#fix /etc/pki/ca-trust/extracted/java/cacerts time field ++rm /etc/pki/ca-trust/extracted/java/cacerts ++/usr/bin/ca-legacy install ++/usr/bin/update-ca-trust ++ ++ ++%end ++ ++%packages --excludedocs ++%end +diff --git a/isomaker/config/riscv64/livecd/rpmlist b/isomaker/config/riscv64/livecd/rpmlist +new file mode 100644 +index 0000000..9f80b75 +--- /dev/null ++++ b/isomaker/config/riscv64/livecd/rpmlist +@@ -0,0 +1,112 @@ ++NetworkManager ++NetworkManager-config-server ++abattis-cantarell-fonts ++audit ++authselect ++basesystem ++bash ++bind ++bind-dnssec-utils ++boost-iostreams ++btrfs-progs ++coreutils ++cronie ++cryptsetup ++curl ++dejavu-fonts ++dhcp ++dnf ++dnf-plugins-core ++dosfstools ++dracut-config-generic ++dracut-config-rescue ++dracut-live ++dracut-network ++e2fsprogs ++filesystem ++findutils ++fipscheck ++firewalld ++genisoimage ++glibc ++grub2 ++gryb2-efi-riscv64 ++grub2-efi-riscv64-cdboot ++grubby ++gtk2 ++hostname ++initscripts ++ipmitool ++iproute ++iprutils ++iputils ++irqbalance ++kbd ++kernel ++kernel-tools ++kexec-tools ++lcms2 ++less ++lftp ++libX11 ++libdaemon ++libgusb ++libiscsi ++libnet ++libnl3 ++libpciaccess ++libteam ++libusbx ++linux-firmware ++lshw ++lsscsi ++lvm2 ++lzo ++man-db ++ncurses ++net-snmp ++net-tools ++nfs-utils ++openEuler-latest-release ++openEuler-logos ++openEuler-release ++openssh ++openssh-clients ++openssh-server ++parted ++passwd ++pciutils ++policycoreutils ++procps-ng ++python3-bind ++python3-decorator ++python3-ply ++python3-slip ++rdma-core ++rest ++rng-tools ++rootfiles ++rpm ++rsync ++rsyslog ++samba-client ++samba-libs ++security-tool ++selinux-policy-mls ++selinux-policy-targeted ++setup ++sg3_utils ++shadow ++smartmontools ++sssd ++sudo ++sysfsutils ++systemd ++tuned ++unzip ++util-linux ++vim-minimal ++wget ++xfsprogs ++yum ++zip +diff --git a/isomaker/config/riscv64/normal.xml b/isomaker/config/riscv64/normal.xml +new file mode 100644 +index 0000000..175a94c +--- /dev/null ++++ b/isomaker/config/riscv64/normal.xml +@@ -0,0 +1,1569 @@ ++ ++ ++ ++ ++ additional-devel ++ Additional Development ++ 附加开发 ++ Additional development headers and libraries for building open-source applications. ++ 用于构建开源应用程序的附加开发标头及程序可。 ++ true ++ false ++ ++ audit-libs-devel ++ bzip2-devel ++ c-ares-devel ++ cyrus-sasl-devel ++ e2fsprogs-devel ++ elfutils-devel ++ elfutils-libelf-devel ++ expat-devel ++ fuse3-devel ++ gmp-devel ++ lksctp-tools-devel ++ iptables-devel ++ libacl-devel ++ libaio-devel ++ libattr-devel ++ libblkid-devel ++ libcap-devel ++ libcap-ng-devel ++ libcurl-devel ++ libffi-devel ++ libgcrypt-devel ++ libnl3-devel ++ libselinux-devel ++ libusbx-devel ++ libuuid-devel ++ lksctp-tools-devel ++ lz4 ++ lz4-devel ++ lzo ++ lzo-devel ++ numactl-devel ++ pciutils-devel ++ pcre-devel ++ polkit-devel ++ popt-devel ++ rdma-core-devel ++ readline-devel ++ sqlite-devel ++ systemd-devel ++ tcl-devel ++ xfsprogs-devel ++ xz-devel ++ SDL-devel ++ alsa-lib-devel ++ binutils-devel ++ boost-devel ++ dbus-glib-devel ++ gd-devel ++ gnutls-devel ++ gpm-devel ++ gstreamer1-devel ++ gstreamer1-plugins-base-devel ++ hunspell-devel ++ java-1.8.0-openjdk-devel ++ libXau-devel ++ libXaw-devel ++ libXinerama-devel ++ libXmu-devel ++ libXrandr-devel ++ libcanberra-devel ++ libdrm-devel ++ libnotify-devel ++ libpfm-devel ++ libpq-devel ++ librsvg2-devel ++ libsoup-devel ++ libssh-devel ++ libtiff-devel ++ libxslt-devel ++ mariadb-devel ++ mpfr-devel ++ net-snmp-devel ++ newt-devel ++ openscap-devel ++ papi-devel ++ protobuf-c ++ sane-backends-devel ++ slang-devel ++ startup-notification-devel ++ tbb-devel ++ tk-devel ++ unixODBC-devel ++ xorg-x11-proto-devel ++ flatpak ++ ++ ++ ++ anaconda-tools ++ Anaconda tools ++ Anaconda 工具 ++ ++ false ++ false ++ ++ lorax ++ chrony ++ cryptsetup ++ device-mapper-multipath ++ dosfstools ++ dracut-network ++ e2fsprogs ++ efibootmgr ++ fcoe-utils ++ firewalld ++ gfs2-utils ++ glibc-all-langpacks ++ grub2-efi-riscv64 ++ grub2-efi-riscv64-cdboot ++ grub2-tools ++ grub2-tools-extra ++ iscsi-initiator-utils ++ lvm2 ++ mdadm ++ realmd ++ libteam ++ tmux ++ xfsprogs ++ authselect-compat ++ kdump-anaconda-addon ++ ++ ++ ++ base ++ Base ++ 基本 ++ The standard installation. ++ true ++ false ++ ++ acl ++ at ++ attr ++ bc ++ cpio ++ crontabs ++ cyrus-sasl ++ dbus ++ ed ++ file ++ iptstate ++ irqbalance ++ kpatch ++ logrotate ++ lsof ++ net-tools ++ pciutils ++ psacct ++ quota ++ openEuler-release ++ openEuler-latest-release ++ sudo ++ symlinks ++ systemd-udev ++ tar ++ tree ++ util-linux-user ++ bash-completion ++ bpftool ++ bzip2 ++ chrony ++ cockpit ++ cryptsetup ++ dos2unix ++ dosfstools ++ ethtool ++ gnupg2 ++ libstoragemgmt ++ lvm2 ++ mailcap ++ man-pages ++ mdadm ++ mlocate ++ mtr ++ nano ++ realmd ++ rng-tools ++ rsync ++ smartmontools ++ sssd ++ strace ++ libteam ++ time ++ unzip ++ usbutils ++ virt-what ++ which ++ words ++ xfsdump ++ zip ++ cifs-utils ++ cockpit-doc ++ ima-evm-utils ++ nfs-utils ++ traceroute ++ zsh ++ ++ ++ ++ conflicts-baseos ++ Conflicts BaseOS ++ 与 BaseOS 冲突 ++ This group includes packages conflicting with an everything installation from the BaseOS repo ++ 这个组包括了与通过 BaseOS repo 安装的软件冲突的软件包 ++ false ++ false ++ ++ ++ ++ ++ container-management ++ Container Management ++ 容器管理 ++ Tools for managing Linux containers ++ 用于管理 Linux 容器的工具 ++ true ++ true ++ ++ containernetworking-plugins ++ ++ ++ ++ core ++ Core ++ 核心 ++ Smallest possible installation ++ 最小安装 ++ true ++ false ++ ++ audit ++ kernel ++ basesystem ++ bash ++ coreutils ++ cronie ++ curl ++ dnf ++ e2fsprogs ++ filesystem ++ firewalld ++ glibc ++ grubby ++ hostname ++ initscripts ++ iproute ++ iprutils ++ iputils ++ irqbalance ++ kbd ++ kexec-tools ++ less ++ man-db ++ ncurses ++ openssh ++ openssh-server ++ openssh-clients ++ openEuler-release ++ openEuler-latest-release ++ parted ++ passwd ++ policycoreutils ++ procps-ng ++ rng-tools ++ rootfiles ++ rpm ++ selinux-policy-targeted ++ setup ++ shadow ++ sssd ++ sudo ++ systemd ++ tuned ++ util-linux ++ vim-minimal ++ xfsprogs ++ yum ++ wget ++ NetworkManager ++ NetworkManager-config-server ++ authselect ++ dnf-plugins-core ++ dracut-config-rescue ++ kernel-tools ++ sysfsutils ++ linux-firmware ++ lshw ++ lsscsi ++ rsyslog ++ security-tool ++ sg3_utils ++ dracut-config-generic ++ dracut-network ++ rdma-core ++ selinux-policy-mls ++ ++ ++ ++ desktop-debugging ++ Desktop Debugging and Performance Tools ++ 桌面调试和运行工具 ++ GUI tools for debugging applications and performance. ++ 调试应用程序和性能的 GUI 工具。 ++ true ++ false ++ ++ crash ++ crash-gcore-command ++ crash-trace-command ++ xrestop ++ ++ ++ ++ development ++ Development Tools ++ 开发工具 ++ A basic development environment. ++ 基本开发环境。 ++ true ++ true ++ ++ autoconf ++ automake ++ binutils ++ bison ++ flex ++ gcc ++ gcc-c++ ++ glibc-devel ++ gettext ++ gdb ++ libtool ++ make ++ patch ++ pkgconf ++ openEuler-rpm-config ++ rpm-build ++ rpm ++ asciidoc ++ byacc ++ ctags ++ diffstat ++ elfutils ++ gcc-gfortran ++ git ++ subversion ++ intltool ++ ltrace ++ patchutils ++ perl-Fedora-VSP ++ perl-generators ++ pesign ++ source-highlight ++ systemtap ++ babel ++ chrpath ++ expect ++ gcc-objc ++ gcc-objc++ ++ mercurial ++ mod_dav_svn ++ systemtap-sdt-devel ++ systemtap-server ++ cmake ++ rpmdevtools ++ rpmlint ++ ++ ++ ++ dial-up ++ Dial-up Networking Support ++ 拨号网络支持 ++ ++ true ++ false ++ ++ ppp ++ ModemManager ++ NetworkManager-adsl ++ lrzsz ++ minicom ++ ++ ++ ++ dns-server ++ DNS Name Server ++ DNS 名称服务器 ++ This package group allows you to run a DNS name server (BIND) on the system. ++ 该软件包组允许您在系统上运行 DNS 名称服务器(BIND)。 ++ false ++ false ++ ++ bind ++ bind-chroot ++ bind-dyndb-ldap ++ unbound ++ ++ ++ ++ directory-client ++ Directory Client ++ 目录客户端 ++ Clients for integration into a network managed by a directory service. ++ 用于整合到使用目录服务管理的网络的客户端。 ++ false ++ false ++ ++ adcli ++ oddjob-mkhomedir ++ realmd ++ sssd ++ clevis-dracut ++ clevis-udisks2 ++ krb5-pkinit ++ krb5-workstation ++ luksmeta ++ nss-pam-ldapd ++ openldap-clients ++ samba-winbind ++ samba-winbind-clients ++ sssd-dbus ++ sssd-tools ++ sssd-winbind-idmap ++ ++ ++ ++ file-server ++ File and Storage Server ++ 文件及存储服务器 ++ CIFS, SMB, NFS, iSCSI, iSER, and iSNS network storage server. ++ CIFS, SMB, NFS, iSCSI, iSER 及 iSNS 网络存储服务器。 ++ true ++ false ++ ++ cifs-utils ++ gssproxy ++ nfs-utils ++ nfs4-acl-tools ++ samba ++ open-isns ++ ++ ++ ++ opengauss-server ++ openGauss Server ++ openGauss数据库 ++ openGauss is an open source relational database management system. ++ openGauss一款开源的关系数据库管理系统。 ++ true ++ false ++ ++ lz4-devel ++ protobuf-devel ++ snappy-devel ++ zstd-devel ++ boost-devel ++ libcgroup-devel ++ unixODBC-devel ++ jemalloc-devel ++ java-1.8.0-openjdk-devel ++ libedit-devel ++ libaio-devel ++ ++ ++ ++ fonts ++ Fonts ++ 字体 ++ Fonts packages for rendering text on the desktop. ++ 用于在桌面显示文字的字体软件包。 ++ true ++ false ++ ++ dejavu-sans-fonts ++ dejavu-sans-mono-fonts ++ dejavu-serif-fonts ++ abattis-cantarell-fonts ++ gnu-free-mono-fonts ++ gnu-free-sans-fonts ++ gnu-free-serif-fonts ++ google-noto-sans-cjk-ttc-fonts ++ google-noto-serif-cjk-ttc-fonts ++ jomolhari-fonts ++ julietaula-montserrat-fonts ++ paktype-naskh-basic-fonts ++ paratype-pt-sans-fonts ++ sil-abyssinica-fonts ++ sil-nuosu-fonts ++ sil-padauk-fonts ++ smc-meera-fonts ++ stix-fonts ++ thai-scalable-waree-fonts ++ bpg-algeti-fonts ++ bpg-chveulebrivi-fonts ++ bpg-courier-fonts ++ bpg-courier-s-fonts ++ bpg-elite-fonts ++ bpg-excelsior-fonts ++ bpg-glaho-fonts ++ bpg-ingiri-fonts ++ bpg-nino-medium-cond-fonts ++ bpg-nino-medium-fonts ++ bpg-sans-fonts ++ bpg-sans-medium-fonts ++ bpg-sans-modern-fonts ++ bpg-sans-regular-fonts ++ bpg-serif-fonts ++ bpg-serif-modern-fonts ++ fontawesome-fonts ++ google-droid-kufi-fonts ++ google-droid-sans-fonts ++ google-droid-sans-mono-fonts ++ google-droid-serif-fonts ++ gubbi-fonts ++ kacst-art-fonts ++ kacst-book-fonts ++ kacst-decorative-fonts ++ kacst-digital-fonts ++ kacst-farsi-fonts ++ kacst-letter-fonts ++ kacst-naskh-fonts ++ kacst-office-fonts ++ kacst-one-fonts ++ kacst-pen-fonts ++ kacst-poster-fonts ++ kacst-qurn-fonts ++ kacst-screen-fonts ++ kacst-title-fonts ++ kacst-titlel-fonts ++ kurdit-unikurd-web-fonts ++ lato-fonts ++ madan-fonts ++ nafees-web-naskh-fonts ++ navilu-fonts ++ overpass-fonts ++ paktype-naqsh-fonts ++ paktype-tehreer-fonts ++ saab-fonts ++ samyak-devanagari-fonts ++ samyak-gujarati-fonts ++ samyak-malayalam-fonts ++ samyak-odia-fonts ++ samyak-tamil-fonts ++ sil-scheherazade-fonts ++ smc-anjalioldlipi-fonts ++ smc-dyuthi-fonts ++ smc-kalyani-fonts ++ smc-rachana-fonts ++ smc-raghumalayalam-fonts ++ smc-suruma-fonts ++ stix-math-fonts ++ thai-scalable-garuda-fonts ++ thai-scalable-kinnari-fonts ++ thai-scalable-loma-fonts ++ thai-scalable-norasi-fonts ++ thai-scalable-purisa-fonts ++ thai-scalable-sawasdee-fonts ++ thai-scalable-tlwgmono-fonts ++ thai-scalable-tlwgtypewriter-fonts ++ thai-scalable-tlwgtypist-fonts ++ thai-scalable-tlwgtypo-fonts ++ thai-scalable-umpush-fonts ++ tibetan-machine-uni-fonts ++ wqy-microhei-fonts ++ xorg-x11-fonts-100dpi ++ xorg-x11-fonts-75dpi ++ xorg-x11-fonts-ISO8859-1-100dpi ++ xorg-x11-fonts-ISO8859-1-75dpi ++ xorg-x11-fonts-ISO8859-14-100dpi ++ xorg-x11-fonts-ISO8859-14-75dpi ++ xorg-x11-fonts-ISO8859-15-100dpi ++ xorg-x11-fonts-ISO8859-15-75dpi ++ xorg-x11-fonts-ISO8859-2-100dpi ++ xorg-x11-fonts-ISO8859-2-75dpi ++ xorg-x11-fonts-ISO8859-9-100dpi ++ xorg-x11-fonts-ISO8859-9-75dpi ++ xorg-x11-fonts-Type1 ++ xorg-x11-fonts-cyrillic ++ xorg-x11-fonts-misc ++ ++ ++ ++ ftp-server ++ FTP Server ++ FTP 服务器 ++ These tools allow you to run an FTP server on the system. ++ 这些工具允许您在系统上运行 FTP 服务器。 ++ true ++ false ++ ++ vsftpd ++ ++ ++ ++ gnome-apps ++ GNOME Applications ++ GNOME 应用程序 ++ A set of commonly used GNOME Applications. ++ 一组经常使用的 GNOME 应用程序。 ++ false ++ false ++ ++ ++ ++ ++ guest-desktop-agents ++ Guest Desktop Agents ++ 虚拟机桌面代理 ++ Agents used when running as a virtualized desktop. ++ 作为虚拟桌面运行时使用的代理。 ++ true ++ false ++ ++ qemu-guest-agent ++ spice-vdagent ++ ++ ++ ++ hardware-monitoring ++ Hardware Monitoring Utilities ++ 硬件监控工具 ++ A set of tools to monitor server hardware. ++ 一组用来监控服务器硬件的工具。 ++ true ++ false ++ ++ rasdaemon ++ smartmontools ++ lm_sensors ++ ++ ++ ++ hardware-support ++ Hardware Support ++ This group is a collection of tools for various hardware specific utilities. ++ true ++ false ++ ++ bolt ++ usb_modeswitch ++ linux-firmware ++ lsscsi ++ opensc ++ openssl-pkcs11 ++ pcsc-lite ++ pcsc-lite-ccid ++ ++ ++ ++ headless-management ++ Headless Management ++ 无图形终端系统管理工具 ++ Tools for managing the system without an attached graphical console. ++ 用于管理无图像终端系统的工具。 ++ true ++ true ++ ++ PackageKit ++ cockpit ++ openssh-server ++ sscg ++ ++ ++ ++ infiniband ++ Infiniband Support ++ Infiniband 支持 ++ Software designed for supporting clustering, grid connectivity, and low-latency, high bandwidth storage using RDMA-based InfiniBand, iWARP, RoCE, and OPA fabrics. ++ true ++ false ++ ++ libibverbs ++ libibverbs-utils ++ librdmacm ++ librdmacm-utils ++ rdma-core ++ ibacm ++ iwpmd ++ perftest ++ srp_daemon ++ opensm ++ ++ ++ ++ input-methods ++ Input Methods ++ 输入法 ++ Input method packages for the input of international text. ++ 输入非英文文本的输入法软件包 ++ true ++ false ++ ++ ibus-m17n ++ ibus-sayura ++ ibus-table ++ ibus-table-array30 ++ gtk2-immodule-xim ++ gtk3-immodule-xim ++ ibus-gtk2 ++ ibus-gtk3 ++ ++ ++ ++ internet-applications ++ Internet Applications ++ 互联网应用程序 ++ Email, chat, and video conferencing software. ++ 电子邮件、聊天和视频会议软件。 ++ false ++ false ++ ++ ++ ++ ++ internet-browser ++ Internet Browser ++ 互联网浏览器 ++ The Firefox web browser ++ Firefox web 浏览器 ++ true ++ false ++ ++ firefox ++ ++ ++ ++ java-platform ++ Java Platform ++ Java 平台 ++ Java support for the Red Hat Enterprise Linux Server and Desktop Platforms. ++ Red Hat Enterprise Linux 服务器和桌面平台的 Java 支持。 ++ true ++ false ++ ++ java-1.8.0-openjdk ++ ++ ++ ++ large-systems ++ Large Systems Performance ++ 大系统性能 ++ Performance support tools for large systems. ++ 用于大型系统的性能支持工具。 ++ true ++ false ++ ++ numactl ++ numad ++ hwloc ++ mstflint ++ qperf ++ ++ ++ ++ legacy-unix ++ Legacy UNIX Compatibility ++ 传统 UNIX 兼容性 ++ Compatibility programs for migration from or working with legacy UNIX environments. ++ 用于从继承 UNIX 环境中迁移或者可用于该环境的兼容程序。 ++ true ++ true ++ ++ mksh ++ ++ ++ ++ legacy-x ++ Legacy X Window System Compatibility ++ 传统 X Windows 系统的兼容性 ++ Compatibility programs for migration from or working with legacy X Window System environments. ++ 用于从继承 X Windows 环境中迁移或者可用于该环境的兼容程序。 ++ true ++ false ++ ++ libXmu ++ xorg-x11-fonts-ISO8859-1-100dpi ++ xorg-x11-fonts-Type1 ++ xorg-x11-fonts-misc ++ xterm ++ ++ ++ ++ mail-server ++ Mail Server ++ 邮件服务器 ++ These packages allow you to configure an IMAP or SMTP mail server. ++ 这些软件包允许您配置 IMAP 或 Postfix 邮件服务器。 ++ true ++ false ++ ++ cyrus-sasl ++ postfix ++ ++ ++ ++ mainframe-access ++ Mainframe Access ++ 主框架访问 ++ Tools for accessing mainframe computing resources. ++ 访问主框架计算源的工具。 ++ true ++ false ++ ++ x3270-text ++ ++ ++ ++ network-file-system-client ++ Network File System Client ++ 网络文件系统客户端 ++ Enables the system to attach to network storage. ++ 启用该系统附加到网络存储。 ++ true ++ false ++ ++ cifs-utils ++ device-mapper-multipath ++ fcoe-utils ++ gssproxy ++ iscsi-initiator-utils ++ lldpad ++ nfs-utils ++ nfs4-acl-tools ++ samba-client ++ cachefilesd ++ cgdcbxd ++ ++ ++ ++ network-server ++ Network Servers ++ 网络服务器 ++ These packages include network-based servers such as DHCP, Kerberos and NIS. ++ 这些软件包包括基于网络的服务器,例如 DHCP、Kerberos 和 NIS。 ++ true ++ true ++ ++ dhcp-server ++ krb5-server ++ dnsmasq ++ freeradius ++ libreswan ++ radvd ++ rsyslog ++ rsyslog-mysql ++ rsyslog-pgsql ++ rsyslog-relp ++ tang ++ tftp-server ++ ++ ++ ++ network-tools ++ Networking Tools ++ 联网工具 ++ Tools for configuring and analyzing computer networks. ++ 配置和分析计算机网络的工具。 ++ true ++ false ++ ++ arpwatch ++ ipset ++ iptraf-ng ++ iptstate ++ dnsmasq ++ freeradius ++ libreswan ++ radvd ++ rsyslog ++ rsyslog-mysql ++ rsyslog-pgsql ++ rsyslog-relp ++ tang ++ tftp-server ++ ++ ++ ++ networkmanager-submodules ++ Common NetworkManager submodules ++ This group contains NetworkManager submodules that are commonly used, but may not be wanted in some streamlined configurations. ++ true ++ false ++ ++ NetworkManager-bluetooth ++ NetworkManager-wifi ++ NetworkManager-wwan ++ dhcp ++ iptables ++ dnsmasq ++ ++ ++ ++ performance ++ Performance Tools ++ 性能工具 ++ Tools for diagnosing system and application-level performance problems. ++ 诊断系统和程序级别性能问题的工具。 ++ true ++ false ++ ++ iotop ++ perf ++ hdparm ++ tuned ++ sysstat ++ pcp ++ pcp-conf ++ pcp-devel ++ pcp-doc ++ pcp-export-pcp2graphite ++ pcp-export-pcp2influxdb ++ pcp-export-pcp2json ++ pcp-export-pcp2xml ++ pcp-export-pcp2zabbix ++ pcp-export-zabbix-agent ++ pcp-import-collectl2pcp ++ pcp-import-ganglia2pcp ++ pcp-import-iostat2pcp ++ pcp-import-mrtg2pcp ++ pcp-libs ++ pcp-libs-devel ++ pcp-pmda-apache ++ pcp-pmda-bash ++ pcp-pmda-bonding ++ pcp-pmda-cifs ++ pcp-pmda-cisco ++ pcp-pmda-dbping ++ pcp-pmda-dm ++ pcp-pmda-docker ++ pcp-pmda-ds389 ++ pcp-pmda-gfs2 ++ pcp-pmda-gluster ++ pcp-pmda-gpfs ++ pcp-pmda-gpsd ++ pcp-pmda-haproxy ++ pcp-pmda-infiniband ++ pcp-pmda-json ++ pcp-pmda-kvm ++ pcp-pmda-libvirt ++ pcp-pmda-lio ++ pcp-pmda-lmsensors ++ pcp-pmda-logger ++ pcp-pmda-lustre ++ pcp-pmda-lustrecomm ++ pcp-pmda-mailq ++ pcp-pmda-memcache ++ pcp-pmda-mic ++ pcp-pmda-mounts ++ pcp-pmda-mysql ++ pcp-pmda-named ++ pcp-pmda-netfilter ++ pcp-pmda-news ++ pcp-pmda-nfsclient ++ pcp-pmda-nvidia-gpu ++ pcp-pmda-oracle ++ pcp-pmda-pdns ++ pcp-pmda-perfevent ++ pcp-pmda-prometheus ++ pcp-pmda-redis ++ pcp-pmda-roomtemp ++ pcp-pmda-rsyslog ++ pcp-pmda-samba ++ pcp-pmda-sendmail ++ pcp-pmda-shping ++ pcp-pmda-slurm ++ pcp-pmda-smart ++ pcp-pmda-snmp ++ pcp-pmda-summary ++ pcp-pmda-systemd ++ pcp-pmda-trace ++ pcp-pmda-unbound ++ pcp-pmda-weblog ++ pcp-pmda-zimbra ++ pcp-pmda-zswap ++ pcp-selinux ++ pcp-system-tools ++ pcp-testsuite ++ pcp-webapi ++ pcp-zeroconf ++ perl-PCP-LogImport ++ perl-PCP-LogSummary ++ perl-PCP-MMV ++ perl-PCP-PMDA ++ powertop ++ iperf3 ++ libpfm ++ papi ++ tuned-utils ++ ++ ++ ++ platform-devel ++ Platform Development ++ 平台开发 ++ Recommended development headers and libraries for developing applications. ++ 推荐用于开发应用程序的标头及程序库。 ++ true ++ false ++ ++ fontconfig-devel ++ freetype-devel ++ glib2-devel ++ glibc-devel ++ krb5-devel ++ libjpeg-turbo-devel ++ libpng-devel ++ libstdc++-devel ++ ncurses-devel ++ openldap-devel ++ openssl-devel ++ pam-devel ++ zlib-devel ++ atk-devel ++ cairo-devel ++ dbus-devel ++ desktop-file-utils ++ gtk2-devel ++ gtk3-devel ++ libICE-devel ++ libSM-devel ++ libX11-devel ++ libXext-devel ++ libXft-devel ++ libXi-devel ++ libXrender-devel ++ libXt-devel ++ libXtst-devel ++ libXv-devel ++ libXxf86dga-devel ++ libdb-devel ++ libjpeg-turbo-devel ++ libstdc++-devel ++ libvirt-devel ++ libxml2-devel ++ libxshmfence-devel ++ mesa-libGL-devel ++ mesa-libGLU-devel ++ nss-devel ++ pango-devel ++ qt5-qtdoc ++ qt5-qttranslations ++ ++ ++ ++ print-client ++ Printing Client ++ 打印客户端 ++ Tools for printing to a local printer or a remote print server. ++ 在本地打印机和远程打印服务器中打印的工具。 ++ true ++ false ++ ++ ++ ++ ++ python-web ++ Python Web ++ Basic Python web application support. ++ 基本 Python 网页应用程序支持。 ++ true ++ false ++ ++ freetype-devel ++ libcurl ++ libcurl-devel ++ libjpeg-turbo ++ libjpeg-turbo-devel ++ python3-magic ++ ++ ++ ++ remote-system-management ++ Remote Management for Linux ++ Linux 的远程管理 ++ Remote management interface. ++ Linux 的远程管理界面。 ++ true ++ false ++ ++ cockpit ++ net-snmp ++ net-snmp-utils ++ openwsman-client ++ tog-pegasus ++ openwsman-server ++ ++ ++ ++ scientific ++ Scientific Support ++ 科学记数法支持 ++ Tools for mathematical and scientific computations, and parallel computing. ++ 用于数学和科学计算以及平行计算的工具。 ++ true ++ true ++ ++ units ++ fftw ++ fftw-devel ++ fftw-static ++ gsl-devel ++ lapack ++ python3-numpy ++ python3-scipy ++ ++ ++ ++ security-tools ++ Security Tools ++ 安全性工具 ++ Security tools for integrity and trust verification. ++ 用于完整性和可信验证的安全性工具。 ++ true ++ true ++ ++ hmaccalc ++ tpm-quote-tools ++ tpm-tools ++ trousers ++ scap-security-guide ++ aide ++ openscap ++ openscap-engine-sce ++ openscap-utils ++ scap-security-guide-doc ++ ++ ++ ++ server-product ++ Server product core ++ Packages mandatory for the server product. ++ true ++ false ++ ++ chrony ++ polkit ++ realmd ++ openEuler-release ++ openEuler-latest-release ++ timedatex ++ dhcp ++ NetworkManager-config-server ++ NetworkManager ++ ++ ++ ++ smb-server ++ Windows File Server ++ Windows 文件服务器 ++ This package group allows you to share files between Linux and MS Windows(tm) systems. ++ 该软件包组允许您在 Linux 和 MS Windows(tm) 系统间共享文件。 ++ true ++ false ++ ++ samba ++ samba-client ++ cifs-utils ++ ++ ++ ++ standard ++ Standard ++ 标准 ++ The standard installation. ++ 标准安装。 ++ true ++ false ++ ++ acl ++ at ++ attr ++ bc ++ cpio ++ crontabs ++ cyrus-sasl ++ dbus ++ ed ++ file ++ iptstate ++ irqbalance ++ kpatch ++ logrotate ++ lsof ++ net-tools ++ pciutils ++ quota ++ openEuler-release ++ openEuler-latest-release ++ sudo ++ symlinks ++ systemd-udev ++ tar ++ tree ++ util-linux-user ++ bash-completion ++ bpftool ++ bzip2 ++ chrony ++ cockpit ++ cryptsetup ++ dos2unix ++ dosfstools ++ ethtool ++ gnupg2 ++ lvm2 ++ mailcap ++ man-pages ++ mdadm ++ mlocate ++ mtr ++ realmd ++ rsync ++ smartmontools ++ sssd ++ strace ++ libteam ++ time ++ unzip ++ usbutils ++ virt-what ++ which ++ words ++ xfsdump ++ zip ++ cifs-utils ++ cockpit-doc ++ ima-evm-utils ++ nfs-utils ++ traceroute ++ zsh ++ psacct ++ libstoragemgmt ++ nano ++ rng-tools ++ rsyslog ++ rsyslog-relp ++ nmap ++ pinfo ++ plymouth ++ tcpdump ++ vim-enhanced ++ wget ++ ++ ++ ++ system-tools ++ System Tools ++ 系统工具 ++ This group is a collection of various tools for the system, such as the client for connecting to SMB shares and tools to monitor network traffic. ++ 这组软件包是各类系统工具的集合,如:连接 SMB 共享的客户;监控网络交通的工具。 ++ true ++ true ++ ++ chrony ++ cifs-utils ++ openldap-clients ++ samba-client ++ setserial ++ tmux ++ zsh ++ arpwatch ++ chrpath ++ fuse ++ iotop ++ lzop ++ xdelta ++ environment-modules ++ libreswan ++ nmap ++ tigervnc ++ PackageKit-command-not-found ++ aide ++ amanda-client ++ convmv ++ createrepo_c ++ freerdp ++ gpm ++ gssdp ++ gupnp ++ mc ++ mtx ++ net-snmp-utils ++ oddjob ++ oddjob-mkhomedir ++ sysstat ++ x3270-x11 ++ ++ ++ ++ virtualization-hypervisor ++ Virtualization Hypervisor ++ 虚拟化 Hypervisor ++ Smallest possible virtualization host installation. ++ 最小的虚拟化主机安装。 ++ false ++ false ++ ++ libvirt ++ libvirt-client ++ libvirt-daemon ++ libvirt-daemon-config-network ++ libvirt-daemon-config-nwfilter ++ libvirt-daemon-driver-interface ++ libvirt-daemon-driver-network ++ libvirt-daemon-driver-nodedev ++ libvirt-daemon-driver-nwfilter ++ libvirt-daemon-driver-qemu ++ libvirt-daemon-driver-secret ++ libvirt-daemon-driver-storage ++ libvirt-daemon-driver-storage-core ++ libvirt-daemon-driver-storage-disk ++ libvirt-daemon-driver-storage-gluster ++ libvirt-daemon-driver-storage-iscsi ++ libvirt-daemon-driver-storage-iscsi-direct ++ libvirt-daemon-driver-storage-logical ++ libvirt-daemon-driver-storage-mpath ++ libvirt-daemon-driver-storage-rbd ++ libvirt-daemon-driver-storage-scsi ++ libvirt-daemon-kvm ++ libvirt-daemon-plugin-sanlock ++ libvirt-daemon-qemu ++ libvirt-devel ++ libvirt-docs ++ libvirt-libs ++ libvirt-nss ++ python3-libvirt ++ qemu-help ++ qemu ++ qemu-block-iscsi ++ qemu-img ++ ++ ++ ++ openvswitch ++ Virtualization Openvswitch ++ 虚拟switch ++ vswitch installation. ++ 安装vswitch。 ++ false ++ false ++ ++ openvswitch ++ ++ ++ ++ remote-desktop-clients ++ Remote Desktop Clients ++ 远程桌面客户端 ++ ++ true ++ false ++ ++ freerdp ++ tigervnc ++ vinagre ++ ++ ++ ++ web-server ++ Basic Web Server ++ 基本网页服务器 ++ These tools allow you to run a Web server on the system. ++ 这些工具允许您在系统上运行万维网服务器。 ++ true ++ false ++ ++ httpd ++ mod_fcgid ++ mod_ssl ++ libmemcached ++ memcached ++ mod_security ++ ++ ++ ++ x11 ++ X Window System ++ X 窗口系统 ++ X Window System Support. ++ X 窗口系统支持。 ++ false ++ false ++ ++ glx-utils ++ mesa-dri-drivers ++ plymouth-system-theme ++ spice-vdagent ++ xorg-x11-drivers ++ xorg-x11-server-Xorg ++ xorg-x11-utils ++ xorg-x11-xauth ++ xorg-x11-xinit ++ xvattr ++ mesa-libGLES ++ tigervnc-server ++ wayland-protocols-devel ++ xorg-x11-drv-libinput ++ ++ ++ ++ development ++ Development ++ 开发 ++ Packages which provide functionality for developing and building applications. ++ 用于开发和构建应用程序的软件包。 ++ 90 ++ ++ additional-devel ++ development ++ platform-devel ++ ++ ++ ++ servers ++ Servers ++ 服务器 ++ Software used for running network servers ++ 用于运行网络服务器的软件 ++ 20 ++ ++ file-server ++ ftp-server ++ mail-server ++ network-server ++ web-server ++ ++ ++ ++ base-system ++ System ++ 系统 ++ Core system components. ++ 核系统组件。 ++ 10 ++ ++ backup-client ++ debugging ++ java-platform ++ print-client ++ smart-card ++ dial-up ++ hardware-monitoring ++ infiniband ++ large-systems ++ legacy-unix ++ mainframe-access ++ network-tools ++ performance ++ scientific ++ security-tools ++ standard ++ ++ ++ ++ desktops ++ Desktops ++ 桌面环境 ++ Desktops and thin clients. ++ 桌面和瘦客户端。 ++ 70 ++ ++ base-x ++ desktop-debugging ++ fonts ++ input-methods ++ legacy-x ++ remote-desktop-clients ++ ++ ++ ++ apps ++ Applications ++ 应用程序 ++ Applications to perform a variety of tasks ++ 执行不同任务的应用程序 ++ 80 ++ ++ graphics ++ ++ ++ ++ minimal-environment ++ Minimal Install ++ 最小安装 ++ Basic functionality. ++ 基本功能。 ++ 1 ++ ++ core ++ ++ ++ standard ++ ++ ++ ++ server-product-environment ++ Server ++ 服务器 ++ An integrated, easy-to-manage server. ++ 集成的易于管理的服务器 ++ 2 ++ ++ container-management ++ core ++ hardware-support ++ headless-management ++ server-product ++ standard ++ ++ ++ debugging ++ dns-server ++ file-server ++ ftp-server ++ hardware-monitoring ++ infiniband ++ mail-server ++ network-file-system-client ++ network-server ++ performance ++ remote-system-management ++ smb-server ++ virtualization-hypervisor ++ web-server ++ opengauss-server ++ ++ ++ ++ virtualization-host-environment ++ Virtualization Host ++ 虚拟化主机 ++ Minimal virtualization host. ++ 最小虚拟化主机。 ++ 40 ++ ++ base ++ core ++ virtualization-hypervisor ++ ++ ++ debugging ++ network-file-system-client ++ remote-system-management ++ openvswitch ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/isomaker/config/riscv64/standard.conf b/isomaker/config/riscv64/standard.conf +new file mode 100644 +index 0000000..73bbb0b +--- /dev/null ++++ b/isomaker/config/riscv64/standard.conf +@@ -0,0 +1,6 @@ ++CONFIG_YUM_REPOS="https://mirror.iscas.ac.cn/openeuler-sig-riscv/openEuler-RISC-V/preview/openEuler-23.09-V1-riscv64/repo/23.09/mainline/" ++CONFIG_PACKAGES_LIST_FILE="config/riscv64/normal.xml" ++CONFIG_RPM_LIST="config/rpmlist.xml" ++CONFIG_PRODUCT="openEuler" ++CONFIG_VERSION="24.03" ++CONFIG_RELEASE="LTS" +diff --git a/isomaker/init.sh b/isomaker/init.sh +index f3222ec..1166d7f 100644 +--- a/isomaker/init.sh ++++ b/isomaker/init.sh +@@ -35,7 +35,7 @@ function parse_cmd_line() + { + #param init + ARCH="$(uname -m)" +- if [ "${ARCH}" = "aarch64" ] || [ "${ARCH}" = "x86_64" ] || [ "${ARCH}" = "loongarch64" ];then ++ if [ "${ARCH}" = "aarch64" ] || [ "${ARCH}" = "x86_64" ] || [ "${ARCH}" = "loongarch64" ] || [ "${ARCH}" = "riscv64" ];then + CONFIG_FILE="${CPATH}/config/${ARCH}/standard.conf" + source "${CONFIG_FILE}" + else +diff --git a/isomaker/iso.sh b/isomaker/iso.sh +index 7bf0bf9..78e3392 100644 +--- a/isomaker/iso.sh ++++ b/isomaker/iso.sh +@@ -26,7 +26,7 @@ function gen_debug_iso() + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DBG_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DBG_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -40,7 +40,7 @@ function gen_standard_iso() + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + isohybrid -u "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -57,7 +57,7 @@ function gen_edge_iso() + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${EDGE_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${EDGE_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -74,7 +74,7 @@ function gen_desktop_iso() + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DESKTOP_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ] ; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DESKTOP_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -91,7 +91,7 @@ function gen_src_iso() + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${SRC_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${SRC_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -110,7 +110,7 @@ function gen_everything_iso() + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + isohybrid -u /result/"${EVE_ISO_NAME}" +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -129,7 +129,7 @@ function gen_everything_debug_iso() + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_DEBUG_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_DEBUG_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -148,7 +148,7 @@ function gen_everything_src_iso() + if [ "$ARCH" == "x86_64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_SRC_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_SRC_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + fi +@@ -162,7 +162,7 @@ function gen_netinst_iso() + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${NETINST_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 + isohybrid -u /result/"${NETINST_ISO_NAME}" +- elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ] ; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${NETINST_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + fi + implantisomd5 /result/"${NETINST_ISO_NAME}" +-- +2.41.0 + diff --git a/normal_riscv64.xml b/normal_riscv64.xml new file mode 100644 index 0000000..175a94c --- /dev/null +++ b/normal_riscv64.xml @@ -0,0 +1,1569 @@ + + + + + additional-devel + Additional Development + 附加开发 + Additional development headers and libraries for building open-source applications. + 用于构建开源应用程序的附加开发标头及程序可。 + true + false + + audit-libs-devel + bzip2-devel + c-ares-devel + cyrus-sasl-devel + e2fsprogs-devel + elfutils-devel + elfutils-libelf-devel + expat-devel + fuse3-devel + gmp-devel + lksctp-tools-devel + iptables-devel + libacl-devel + libaio-devel + libattr-devel + libblkid-devel + libcap-devel + libcap-ng-devel + libcurl-devel + libffi-devel + libgcrypt-devel + libnl3-devel + libselinux-devel + libusbx-devel + libuuid-devel + lksctp-tools-devel + lz4 + lz4-devel + lzo + lzo-devel + numactl-devel + pciutils-devel + pcre-devel + polkit-devel + popt-devel + rdma-core-devel + readline-devel + sqlite-devel + systemd-devel + tcl-devel + xfsprogs-devel + xz-devel + SDL-devel + alsa-lib-devel + binutils-devel + boost-devel + dbus-glib-devel + gd-devel + gnutls-devel + gpm-devel + gstreamer1-devel + gstreamer1-plugins-base-devel + hunspell-devel + java-1.8.0-openjdk-devel + libXau-devel + libXaw-devel + libXinerama-devel + libXmu-devel + libXrandr-devel + libcanberra-devel + libdrm-devel + libnotify-devel + libpfm-devel + libpq-devel + librsvg2-devel + libsoup-devel + libssh-devel + libtiff-devel + libxslt-devel + mariadb-devel + mpfr-devel + net-snmp-devel + newt-devel + openscap-devel + papi-devel + protobuf-c + sane-backends-devel + slang-devel + startup-notification-devel + tbb-devel + tk-devel + unixODBC-devel + xorg-x11-proto-devel + flatpak + + + + anaconda-tools + Anaconda tools + Anaconda 工具 + + false + false + + lorax + chrony + cryptsetup + device-mapper-multipath + dosfstools + dracut-network + e2fsprogs + efibootmgr + fcoe-utils + firewalld + gfs2-utils + glibc-all-langpacks + grub2-efi-riscv64 + grub2-efi-riscv64-cdboot + grub2-tools + grub2-tools-extra + iscsi-initiator-utils + lvm2 + mdadm + realmd + libteam + tmux + xfsprogs + authselect-compat + kdump-anaconda-addon + + + + base + Base + 基本 + The standard installation. + true + false + + acl + at + attr + bc + cpio + crontabs + cyrus-sasl + dbus + ed + file + iptstate + irqbalance + kpatch + logrotate + lsof + net-tools + pciutils + psacct + quota + openEuler-release + openEuler-latest-release + sudo + symlinks + systemd-udev + tar + tree + util-linux-user + bash-completion + bpftool + bzip2 + chrony + cockpit + cryptsetup + dos2unix + dosfstools + ethtool + gnupg2 + libstoragemgmt + lvm2 + mailcap + man-pages + mdadm + mlocate + mtr + nano + realmd + rng-tools + rsync + smartmontools + sssd + strace + libteam + time + unzip + usbutils + virt-what + which + words + xfsdump + zip + cifs-utils + cockpit-doc + ima-evm-utils + nfs-utils + traceroute + zsh + + + + conflicts-baseos + Conflicts BaseOS + 与 BaseOS 冲突 + This group includes packages conflicting with an everything installation from the BaseOS repo + 这个组包括了与通过 BaseOS repo 安装的软件冲突的软件包 + false + false + + + + + container-management + Container Management + 容器管理 + Tools for managing Linux containers + 用于管理 Linux 容器的工具 + true + true + + containernetworking-plugins + + + + core + Core + 核心 + Smallest possible installation + 最小安装 + true + false + + audit + kernel + basesystem + bash + coreutils + cronie + curl + dnf + e2fsprogs + filesystem + firewalld + glibc + grubby + hostname + initscripts + iproute + iprutils + iputils + irqbalance + kbd + kexec-tools + less + man-db + ncurses + openssh + openssh-server + openssh-clients + openEuler-release + openEuler-latest-release + parted + passwd + policycoreutils + procps-ng + rng-tools + rootfiles + rpm + selinux-policy-targeted + setup + shadow + sssd + sudo + systemd + tuned + util-linux + vim-minimal + xfsprogs + yum + wget + NetworkManager + NetworkManager-config-server + authselect + dnf-plugins-core + dracut-config-rescue + kernel-tools + sysfsutils + linux-firmware + lshw + lsscsi + rsyslog + security-tool + sg3_utils + dracut-config-generic + dracut-network + rdma-core + selinux-policy-mls + + + + desktop-debugging + Desktop Debugging and Performance Tools + 桌面调试和运行工具 + GUI tools for debugging applications and performance. + 调试应用程序和性能的 GUI 工具。 + true + false + + crash + crash-gcore-command + crash-trace-command + xrestop + + + + development + Development Tools + 开发工具 + A basic development environment. + 基本开发环境。 + true + true + + autoconf + automake + binutils + bison + flex + gcc + gcc-c++ + glibc-devel + gettext + gdb + libtool + make + patch + pkgconf + openEuler-rpm-config + rpm-build + rpm + asciidoc + byacc + ctags + diffstat + elfutils + gcc-gfortran + git + subversion + intltool + ltrace + patchutils + perl-Fedora-VSP + perl-generators + pesign + source-highlight + systemtap + babel + chrpath + expect + gcc-objc + gcc-objc++ + mercurial + mod_dav_svn + systemtap-sdt-devel + systemtap-server + cmake + rpmdevtools + rpmlint + + + + dial-up + Dial-up Networking Support + 拨号网络支持 + + true + false + + ppp + ModemManager + NetworkManager-adsl + lrzsz + minicom + + + + dns-server + DNS Name Server + DNS 名称服务器 + This package group allows you to run a DNS name server (BIND) on the system. + 该软件包组允许您在系统上运行 DNS 名称服务器(BIND)。 + false + false + + bind + bind-chroot + bind-dyndb-ldap + unbound + + + + directory-client + Directory Client + 目录客户端 + Clients for integration into a network managed by a directory service. + 用于整合到使用目录服务管理的网络的客户端。 + false + false + + adcli + oddjob-mkhomedir + realmd + sssd + clevis-dracut + clevis-udisks2 + krb5-pkinit + krb5-workstation + luksmeta + nss-pam-ldapd + openldap-clients + samba-winbind + samba-winbind-clients + sssd-dbus + sssd-tools + sssd-winbind-idmap + + + + file-server + File and Storage Server + 文件及存储服务器 + CIFS, SMB, NFS, iSCSI, iSER, and iSNS network storage server. + CIFS, SMB, NFS, iSCSI, iSER 及 iSNS 网络存储服务器。 + true + false + + cifs-utils + gssproxy + nfs-utils + nfs4-acl-tools + samba + open-isns + + + + opengauss-server + openGauss Server + openGauss数据库 + openGauss is an open source relational database management system. + openGauss一款开源的关系数据库管理系统。 + true + false + + lz4-devel + protobuf-devel + snappy-devel + zstd-devel + boost-devel + libcgroup-devel + unixODBC-devel + jemalloc-devel + java-1.8.0-openjdk-devel + libedit-devel + libaio-devel + + + + fonts + Fonts + 字体 + Fonts packages for rendering text on the desktop. + 用于在桌面显示文字的字体软件包。 + true + false + + dejavu-sans-fonts + dejavu-sans-mono-fonts + dejavu-serif-fonts + abattis-cantarell-fonts + gnu-free-mono-fonts + gnu-free-sans-fonts + gnu-free-serif-fonts + google-noto-sans-cjk-ttc-fonts + google-noto-serif-cjk-ttc-fonts + jomolhari-fonts + julietaula-montserrat-fonts + paktype-naskh-basic-fonts + paratype-pt-sans-fonts + sil-abyssinica-fonts + sil-nuosu-fonts + sil-padauk-fonts + smc-meera-fonts + stix-fonts + thai-scalable-waree-fonts + bpg-algeti-fonts + bpg-chveulebrivi-fonts + bpg-courier-fonts + bpg-courier-s-fonts + bpg-elite-fonts + bpg-excelsior-fonts + bpg-glaho-fonts + bpg-ingiri-fonts + bpg-nino-medium-cond-fonts + bpg-nino-medium-fonts + bpg-sans-fonts + bpg-sans-medium-fonts + bpg-sans-modern-fonts + bpg-sans-regular-fonts + bpg-serif-fonts + bpg-serif-modern-fonts + fontawesome-fonts + google-droid-kufi-fonts + google-droid-sans-fonts + google-droid-sans-mono-fonts + google-droid-serif-fonts + gubbi-fonts + kacst-art-fonts + kacst-book-fonts + kacst-decorative-fonts + kacst-digital-fonts + kacst-farsi-fonts + kacst-letter-fonts + kacst-naskh-fonts + kacst-office-fonts + kacst-one-fonts + kacst-pen-fonts + kacst-poster-fonts + kacst-qurn-fonts + kacst-screen-fonts + kacst-title-fonts + kacst-titlel-fonts + kurdit-unikurd-web-fonts + lato-fonts + madan-fonts + nafees-web-naskh-fonts + navilu-fonts + overpass-fonts + paktype-naqsh-fonts + paktype-tehreer-fonts + saab-fonts + samyak-devanagari-fonts + samyak-gujarati-fonts + samyak-malayalam-fonts + samyak-odia-fonts + samyak-tamil-fonts + sil-scheherazade-fonts + smc-anjalioldlipi-fonts + smc-dyuthi-fonts + smc-kalyani-fonts + smc-rachana-fonts + smc-raghumalayalam-fonts + smc-suruma-fonts + stix-math-fonts + thai-scalable-garuda-fonts + thai-scalable-kinnari-fonts + thai-scalable-loma-fonts + thai-scalable-norasi-fonts + thai-scalable-purisa-fonts + thai-scalable-sawasdee-fonts + thai-scalable-tlwgmono-fonts + thai-scalable-tlwgtypewriter-fonts + thai-scalable-tlwgtypist-fonts + thai-scalable-tlwgtypo-fonts + thai-scalable-umpush-fonts + tibetan-machine-uni-fonts + wqy-microhei-fonts + xorg-x11-fonts-100dpi + xorg-x11-fonts-75dpi + xorg-x11-fonts-ISO8859-1-100dpi + xorg-x11-fonts-ISO8859-1-75dpi + xorg-x11-fonts-ISO8859-14-100dpi + xorg-x11-fonts-ISO8859-14-75dpi + xorg-x11-fonts-ISO8859-15-100dpi + xorg-x11-fonts-ISO8859-15-75dpi + xorg-x11-fonts-ISO8859-2-100dpi + xorg-x11-fonts-ISO8859-2-75dpi + xorg-x11-fonts-ISO8859-9-100dpi + xorg-x11-fonts-ISO8859-9-75dpi + xorg-x11-fonts-Type1 + xorg-x11-fonts-cyrillic + xorg-x11-fonts-misc + + + + ftp-server + FTP Server + FTP 服务器 + These tools allow you to run an FTP server on the system. + 这些工具允许您在系统上运行 FTP 服务器。 + true + false + + vsftpd + + + + gnome-apps + GNOME Applications + GNOME 应用程序 + A set of commonly used GNOME Applications. + 一组经常使用的 GNOME 应用程序。 + false + false + + + + + guest-desktop-agents + Guest Desktop Agents + 虚拟机桌面代理 + Agents used when running as a virtualized desktop. + 作为虚拟桌面运行时使用的代理。 + true + false + + qemu-guest-agent + spice-vdagent + + + + hardware-monitoring + Hardware Monitoring Utilities + 硬件监控工具 + A set of tools to monitor server hardware. + 一组用来监控服务器硬件的工具。 + true + false + + rasdaemon + smartmontools + lm_sensors + + + + hardware-support + Hardware Support + This group is a collection of tools for various hardware specific utilities. + true + false + + bolt + usb_modeswitch + linux-firmware + lsscsi + opensc + openssl-pkcs11 + pcsc-lite + pcsc-lite-ccid + + + + headless-management + Headless Management + 无图形终端系统管理工具 + Tools for managing the system without an attached graphical console. + 用于管理无图像终端系统的工具。 + true + true + + PackageKit + cockpit + openssh-server + sscg + + + + infiniband + Infiniband Support + Infiniband 支持 + Software designed for supporting clustering, grid connectivity, and low-latency, high bandwidth storage using RDMA-based InfiniBand, iWARP, RoCE, and OPA fabrics. + true + false + + libibverbs + libibverbs-utils + librdmacm + librdmacm-utils + rdma-core + ibacm + iwpmd + perftest + srp_daemon + opensm + + + + input-methods + Input Methods + 输入法 + Input method packages for the input of international text. + 输入非英文文本的输入法软件包 + true + false + + ibus-m17n + ibus-sayura + ibus-table + ibus-table-array30 + gtk2-immodule-xim + gtk3-immodule-xim + ibus-gtk2 + ibus-gtk3 + + + + internet-applications + Internet Applications + 互联网应用程序 + Email, chat, and video conferencing software. + 电子邮件、聊天和视频会议软件。 + false + false + + + + + internet-browser + Internet Browser + 互联网浏览器 + The Firefox web browser + Firefox web 浏览器 + true + false + + firefox + + + + java-platform + Java Platform + Java 平台 + Java support for the Red Hat Enterprise Linux Server and Desktop Platforms. + Red Hat Enterprise Linux 服务器和桌面平台的 Java 支持。 + true + false + + java-1.8.0-openjdk + + + + large-systems + Large Systems Performance + 大系统性能 + Performance support tools for large systems. + 用于大型系统的性能支持工具。 + true + false + + numactl + numad + hwloc + mstflint + qperf + + + + legacy-unix + Legacy UNIX Compatibility + 传统 UNIX 兼容性 + Compatibility programs for migration from or working with legacy UNIX environments. + 用于从继承 UNIX 环境中迁移或者可用于该环境的兼容程序。 + true + true + + mksh + + + + legacy-x + Legacy X Window System Compatibility + 传统 X Windows 系统的兼容性 + Compatibility programs for migration from or working with legacy X Window System environments. + 用于从继承 X Windows 环境中迁移或者可用于该环境的兼容程序。 + true + false + + libXmu + xorg-x11-fonts-ISO8859-1-100dpi + xorg-x11-fonts-Type1 + xorg-x11-fonts-misc + xterm + + + + mail-server + Mail Server + 邮件服务器 + These packages allow you to configure an IMAP or SMTP mail server. + 这些软件包允许您配置 IMAP 或 Postfix 邮件服务器。 + true + false + + cyrus-sasl + postfix + + + + mainframe-access + Mainframe Access + 主框架访问 + Tools for accessing mainframe computing resources. + 访问主框架计算源的工具。 + true + false + + x3270-text + + + + network-file-system-client + Network File System Client + 网络文件系统客户端 + Enables the system to attach to network storage. + 启用该系统附加到网络存储。 + true + false + + cifs-utils + device-mapper-multipath + fcoe-utils + gssproxy + iscsi-initiator-utils + lldpad + nfs-utils + nfs4-acl-tools + samba-client + cachefilesd + cgdcbxd + + + + network-server + Network Servers + 网络服务器 + These packages include network-based servers such as DHCP, Kerberos and NIS. + 这些软件包包括基于网络的服务器,例如 DHCP、Kerberos 和 NIS。 + true + true + + dhcp-server + krb5-server + dnsmasq + freeradius + libreswan + radvd + rsyslog + rsyslog-mysql + rsyslog-pgsql + rsyslog-relp + tang + tftp-server + + + + network-tools + Networking Tools + 联网工具 + Tools for configuring and analyzing computer networks. + 配置和分析计算机网络的工具。 + true + false + + arpwatch + ipset + iptraf-ng + iptstate + dnsmasq + freeradius + libreswan + radvd + rsyslog + rsyslog-mysql + rsyslog-pgsql + rsyslog-relp + tang + tftp-server + + + + networkmanager-submodules + Common NetworkManager submodules + This group contains NetworkManager submodules that are commonly used, but may not be wanted in some streamlined configurations. + true + false + + NetworkManager-bluetooth + NetworkManager-wifi + NetworkManager-wwan + dhcp + iptables + dnsmasq + + + + performance + Performance Tools + 性能工具 + Tools for diagnosing system and application-level performance problems. + 诊断系统和程序级别性能问题的工具。 + true + false + + iotop + perf + hdparm + tuned + sysstat + pcp + pcp-conf + pcp-devel + pcp-doc + pcp-export-pcp2graphite + pcp-export-pcp2influxdb + pcp-export-pcp2json + pcp-export-pcp2xml + pcp-export-pcp2zabbix + pcp-export-zabbix-agent + pcp-import-collectl2pcp + pcp-import-ganglia2pcp + pcp-import-iostat2pcp + pcp-import-mrtg2pcp + pcp-libs + pcp-libs-devel + pcp-pmda-apache + pcp-pmda-bash + pcp-pmda-bonding + pcp-pmda-cifs + pcp-pmda-cisco + pcp-pmda-dbping + pcp-pmda-dm + pcp-pmda-docker + pcp-pmda-ds389 + pcp-pmda-gfs2 + pcp-pmda-gluster + pcp-pmda-gpfs + pcp-pmda-gpsd + pcp-pmda-haproxy + pcp-pmda-infiniband + pcp-pmda-json + pcp-pmda-kvm + pcp-pmda-libvirt + pcp-pmda-lio + pcp-pmda-lmsensors + pcp-pmda-logger + pcp-pmda-lustre + pcp-pmda-lustrecomm + pcp-pmda-mailq + pcp-pmda-memcache + pcp-pmda-mic + pcp-pmda-mounts + pcp-pmda-mysql + pcp-pmda-named + pcp-pmda-netfilter + pcp-pmda-news + pcp-pmda-nfsclient + pcp-pmda-nvidia-gpu + pcp-pmda-oracle + pcp-pmda-pdns + pcp-pmda-perfevent + pcp-pmda-prometheus + pcp-pmda-redis + pcp-pmda-roomtemp + pcp-pmda-rsyslog + pcp-pmda-samba + pcp-pmda-sendmail + pcp-pmda-shping + pcp-pmda-slurm + pcp-pmda-smart + pcp-pmda-snmp + pcp-pmda-summary + pcp-pmda-systemd + pcp-pmda-trace + pcp-pmda-unbound + pcp-pmda-weblog + pcp-pmda-zimbra + pcp-pmda-zswap + pcp-selinux + pcp-system-tools + pcp-testsuite + pcp-webapi + pcp-zeroconf + perl-PCP-LogImport + perl-PCP-LogSummary + perl-PCP-MMV + perl-PCP-PMDA + powertop + iperf3 + libpfm + papi + tuned-utils + + + + platform-devel + Platform Development + 平台开发 + Recommended development headers and libraries for developing applications. + 推荐用于开发应用程序的标头及程序库。 + true + false + + fontconfig-devel + freetype-devel + glib2-devel + glibc-devel + krb5-devel + libjpeg-turbo-devel + libpng-devel + libstdc++-devel + ncurses-devel + openldap-devel + openssl-devel + pam-devel + zlib-devel + atk-devel + cairo-devel + dbus-devel + desktop-file-utils + gtk2-devel + gtk3-devel + libICE-devel + libSM-devel + libX11-devel + libXext-devel + libXft-devel + libXi-devel + libXrender-devel + libXt-devel + libXtst-devel + libXv-devel + libXxf86dga-devel + libdb-devel + libjpeg-turbo-devel + libstdc++-devel + libvirt-devel + libxml2-devel + libxshmfence-devel + mesa-libGL-devel + mesa-libGLU-devel + nss-devel + pango-devel + qt5-qtdoc + qt5-qttranslations + + + + print-client + Printing Client + 打印客户端 + Tools for printing to a local printer or a remote print server. + 在本地打印机和远程打印服务器中打印的工具。 + true + false + + + + + python-web + Python Web + Basic Python web application support. + 基本 Python 网页应用程序支持。 + true + false + + freetype-devel + libcurl + libcurl-devel + libjpeg-turbo + libjpeg-turbo-devel + python3-magic + + + + remote-system-management + Remote Management for Linux + Linux 的远程管理 + Remote management interface. + Linux 的远程管理界面。 + true + false + + cockpit + net-snmp + net-snmp-utils + openwsman-client + tog-pegasus + openwsman-server + + + + scientific + Scientific Support + 科学记数法支持 + Tools for mathematical and scientific computations, and parallel computing. + 用于数学和科学计算以及平行计算的工具。 + true + true + + units + fftw + fftw-devel + fftw-static + gsl-devel + lapack + python3-numpy + python3-scipy + + + + security-tools + Security Tools + 安全性工具 + Security tools for integrity and trust verification. + 用于完整性和可信验证的安全性工具。 + true + true + + hmaccalc + tpm-quote-tools + tpm-tools + trousers + scap-security-guide + aide + openscap + openscap-engine-sce + openscap-utils + scap-security-guide-doc + + + + server-product + Server product core + Packages mandatory for the server product. + true + false + + chrony + polkit + realmd + openEuler-release + openEuler-latest-release + timedatex + dhcp + NetworkManager-config-server + NetworkManager + + + + smb-server + Windows File Server + Windows 文件服务器 + This package group allows you to share files between Linux and MS Windows(tm) systems. + 该软件包组允许您在 Linux 和 MS Windows(tm) 系统间共享文件。 + true + false + + samba + samba-client + cifs-utils + + + + standard + Standard + 标准 + The standard installation. + 标准安装。 + true + false + + acl + at + attr + bc + cpio + crontabs + cyrus-sasl + dbus + ed + file + iptstate + irqbalance + kpatch + logrotate + lsof + net-tools + pciutils + quota + openEuler-release + openEuler-latest-release + sudo + symlinks + systemd-udev + tar + tree + util-linux-user + bash-completion + bpftool + bzip2 + chrony + cockpit + cryptsetup + dos2unix + dosfstools + ethtool + gnupg2 + lvm2 + mailcap + man-pages + mdadm + mlocate + mtr + realmd + rsync + smartmontools + sssd + strace + libteam + time + unzip + usbutils + virt-what + which + words + xfsdump + zip + cifs-utils + cockpit-doc + ima-evm-utils + nfs-utils + traceroute + zsh + psacct + libstoragemgmt + nano + rng-tools + rsyslog + rsyslog-relp + nmap + pinfo + plymouth + tcpdump + vim-enhanced + wget + + + + system-tools + System Tools + 系统工具 + This group is a collection of various tools for the system, such as the client for connecting to SMB shares and tools to monitor network traffic. + 这组软件包是各类系统工具的集合,如:连接 SMB 共享的客户;监控网络交通的工具。 + true + true + + chrony + cifs-utils + openldap-clients + samba-client + setserial + tmux + zsh + arpwatch + chrpath + fuse + iotop + lzop + xdelta + environment-modules + libreswan + nmap + tigervnc + PackageKit-command-not-found + aide + amanda-client + convmv + createrepo_c + freerdp + gpm + gssdp + gupnp + mc + mtx + net-snmp-utils + oddjob + oddjob-mkhomedir + sysstat + x3270-x11 + + + + virtualization-hypervisor + Virtualization Hypervisor + 虚拟化 Hypervisor + Smallest possible virtualization host installation. + 最小的虚拟化主机安装。 + false + false + + libvirt + libvirt-client + libvirt-daemon + libvirt-daemon-config-network + libvirt-daemon-config-nwfilter + libvirt-daemon-driver-interface + libvirt-daemon-driver-network + libvirt-daemon-driver-nodedev + libvirt-daemon-driver-nwfilter + libvirt-daemon-driver-qemu + libvirt-daemon-driver-secret + libvirt-daemon-driver-storage + libvirt-daemon-driver-storage-core + libvirt-daemon-driver-storage-disk + libvirt-daemon-driver-storage-gluster + libvirt-daemon-driver-storage-iscsi + libvirt-daemon-driver-storage-iscsi-direct + libvirt-daemon-driver-storage-logical + libvirt-daemon-driver-storage-mpath + libvirt-daemon-driver-storage-rbd + libvirt-daemon-driver-storage-scsi + libvirt-daemon-kvm + libvirt-daemon-plugin-sanlock + libvirt-daemon-qemu + libvirt-devel + libvirt-docs + libvirt-libs + libvirt-nss + python3-libvirt + qemu-help + qemu + qemu-block-iscsi + qemu-img + + + + openvswitch + Virtualization Openvswitch + 虚拟switch + vswitch installation. + 安装vswitch。 + false + false + + openvswitch + + + + remote-desktop-clients + Remote Desktop Clients + 远程桌面客户端 + + true + false + + freerdp + tigervnc + vinagre + + + + web-server + Basic Web Server + 基本网页服务器 + These tools allow you to run a Web server on the system. + 这些工具允许您在系统上运行万维网服务器。 + true + false + + httpd + mod_fcgid + mod_ssl + libmemcached + memcached + mod_security + + + + x11 + X Window System + X 窗口系统 + X Window System Support. + X 窗口系统支持。 + false + false + + glx-utils + mesa-dri-drivers + plymouth-system-theme + spice-vdagent + xorg-x11-drivers + xorg-x11-server-Xorg + xorg-x11-utils + xorg-x11-xauth + xorg-x11-xinit + xvattr + mesa-libGLES + tigervnc-server + wayland-protocols-devel + xorg-x11-drv-libinput + + + + development + Development + 开发 + Packages which provide functionality for developing and building applications. + 用于开发和构建应用程序的软件包。 + 90 + + additional-devel + development + platform-devel + + + + servers + Servers + 服务器 + Software used for running network servers + 用于运行网络服务器的软件 + 20 + + file-server + ftp-server + mail-server + network-server + web-server + + + + base-system + System + 系统 + Core system components. + 核系统组件。 + 10 + + backup-client + debugging + java-platform + print-client + smart-card + dial-up + hardware-monitoring + infiniband + large-systems + legacy-unix + mainframe-access + network-tools + performance + scientific + security-tools + standard + + + + desktops + Desktops + 桌面环境 + Desktops and thin clients. + 桌面和瘦客户端。 + 70 + + base-x + desktop-debugging + fonts + input-methods + legacy-x + remote-desktop-clients + + + + apps + Applications + 应用程序 + Applications to perform a variety of tasks + 执行不同任务的应用程序 + 80 + + graphics + + + + minimal-environment + Minimal Install + 最小安装 + Basic functionality. + 基本功能。 + 1 + + core + + + standard + + + + server-product-environment + Server + 服务器 + An integrated, easy-to-manage server. + 集成的易于管理的服务器 + 2 + + container-management + core + hardware-support + headless-management + server-product + standard + + + debugging + dns-server + file-server + ftp-server + hardware-monitoring + infiniband + mail-server + network-file-system-client + network-server + performance + remote-system-management + smb-server + virtualization-hypervisor + web-server + opengauss-server + + + + virtualization-host-environment + Virtualization Host + 虚拟化主机 + Minimal virtualization host. + 最小虚拟化主机。 + 40 + + base + core + virtualization-hypervisor + + + debugging + network-file-system-client + remote-system-management + openvswitch + + + + + + + + + + + + diff --git a/oemaker.spec b/oemaker.spec index 2a73971..8c5c869 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -15,7 +15,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 9 +Release: 10 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -29,6 +29,8 @@ Source7: desktop_normal_x86_64.xml Source8: normal_loongarch64.xml Source9: rpmlist_loongarch64.xml Source10: desktop_normal_loongarch64.xml +Source11: rpmlist_riscv64.xml +Source12: normal_riscv64.xml Requires: createrepo dnf-plugins-core genisoimage isomd5sum grep bash libselinux-utils libxml2 anaconda libselinux-utils Requires: lorax >= 19.6.78-1 @@ -36,6 +38,10 @@ Requires: lorax >= 19.6.78-1 # Patch here Patch0001: 0001-fix-createrepo-data-error.patch Patch0002: add-openEuler_repo.conf-for-loongarch64.patch +%ifarch riscv64 +Patch0003: 0001-add-riscv64-support.patch +%endif + %description a building tool for DVD ISO making and ISO cutting @@ -84,6 +90,14 @@ cp %{SOURCE10} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/loongarch cd %{_builddir}/%{name}-%{version}/%{name} %autopatch -p1 +%ifarch riscv64 +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml +cp %{SOURCE11} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/riscv64/normal.xml +cp %{SOURCE12} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/riscv64/normal.xml +%endif + + %install sys_arch=$(uname -m) @@ -129,6 +143,9 @@ install -m 700 %{name}/isomaker/config/aarch64/livecd/live/aarch64.tmpl %{buildr install -m 700 %{name}/isomaker/config/common/livecd/live/* %{buildroot}/opt/oemaker/config/common/livecd/live/ install -m 400 %{name}/isomaker/config/common/livecd/root_pwd %{buildroot}/opt/oemaker/config/common/livecd/root_pwd %endif +%ifarch riscv64 +install -m 700 %{name}/isomaker/config/riscv64/livecd/live/riscv64.tmpl %{buildroot}/opt/oemaker/config/riscv64/livecd/live/riscv64.tmpl +%endif install -m 700 %{name}/isomaker/docs/* %{buildroot}/opt/oemaker/docs/ cp -ar %{name}/isomaker/80-openeuler %{buildroot}/opt/oemaker/ @@ -196,6 +213,9 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Tue May 28 2024 Ouuleilei - 3.1.0-10 +- add riscv64 support + * Tue May 21 2024 Wenlong Zhang - 3.1.0-9 - ID:NA - SUG:NA diff --git a/rpmlist_riscv64.xml b/rpmlist_riscv64.xml new file mode 100644 index 0000000..c9aa0ea --- /dev/null +++ b/rpmlist_riscv64.xml @@ -0,0 +1,1441 @@ + + + + mariadb + mariadb-server + + + abrt-addon-ccpp + podman-help + libcmpiCppImpl0 + libev-libevent-devel + mariadb-devel + mariadb-test + podman-docker + python3-unversioned-command + python3-abrt-container-addon + + + texlive-collection-bibtexextra + texlive-collection-mathscience + texlive-collection-latexextra + texlive-collection-fontsextra + texlive-ctanupload + texlive-exceltex + texlive-latexindent + texlive-biblatex-apa + texlive-collection-binextra + texlive-collection-fontutils + texlive-includernw + texlive-oldstandard + texlive-scheme-full + texlive-scheme-gust + texlive-scheme-medium + texlive-scheme-tetex + drbd + drbd-bash-completion + drbd-pacemaker + drbd-rgmanager + drbd-udev + drbd-utils + gnome-boxes + nodejs-grunt-contrib-watch + + + drbd + gnome-boxes + nodejs-grunt-contrib-watch + + + drbd-debuginfo + drbd-debugsource + gnome-boxes-debuginfo + gnome-boxes-debugsource + + + edk2-aarch64 + grub2-efi-aa64 + grub2-efi-aa64-modules + kae-driver + kae-openssl + kae-zip + uadk_engine + libwd + shim-aa64 + librados2 + kata-containers + DCF + opengauss + + + edk2-ovmf + grub2-efi-x64 + grub2-efi-x64-modules + shim + librados2 + kata-containers + DCF + opengauss + + + edk2-ovmf-riscv64 + grub2-efi-riscv64 + grub2-efi-riscv64-modules + + + abattis-cantarell-fonts + abattis-cantarell-fonts-help + accountsservice + accountsservice-help + accountsservice-libs + acl + acl-help + acpid + acpid-help + adcli + adcli-help + adobe-mappings-cmap + adobe-mappings-cmap-help + adobe-mappings-pdf + adobe-mappings-pdf-help + aide + aide-help + alsa-firmware + alsa-tools-firmware + apr + apr-help + arptables + arptables-help + arpwatch + arpwatch-help + asciidoc + asciidoc-help + at + at-help + attr + attr-help + atune + atune-client + atune-db + atune-engine + audiofile + audit + audit-help + audit-libs + audit-libs-devel + authd + authd-help + authselect + authselect-compat + authselect-help + authselect-libs + avahi + avahi-autoipd + avahi-compat-howl + avahi-compat-libdns_sd + avahi-dnsconfd + avahi-gobject + avahi-libs + avahi-tools + basesystem + bash + bash-completion + bash-completion-help + bash-help + bc + bc-help + bind-chroot + bind-dyndb-ldap + bind-libs + bind-utils + binutils + binutils-devel + bison + bison-help + blas-devel + blktrace + blktrace-help + bluez + bluez-help + boost-atomic + boost-chrono + boost-context + boost-date-time + boost-devel + boost-filesystem + boost-graph + boost-help + boost-iostreams + boost-locale + boost-math + boost-program-options + boost-python3 + boost-random + boost-regex + boost-serialization + boost-system + boost-test + boost-thread + boost-timer + boost-wave + bridge-utils + brltty-docs + brotli + btrfs-progs + btrfs-progs-help + busybox + busybox-help + bzip2 + bzip2-help + ca-certificates + cachefilesd + cachefilesd-help + c-ares + c-ares-help + ccid + chkconfig + chkconfig-help + chrony + chrpath + chrpath-help + cifs-utils + cifs-utils-help + cjkuni-ukai-fonts + cjkuni-ukai-fonts-help + clang + clang-analyzer + clang-devel + clang-libs + clang-resource-filesystem + clang-tools-extra + clibcni-devel + cloud-init + cloud-init-help + clutter + clutter-gst3 + clutter-gst3-help + clutter-gtk + clutter-gtk-help + clutter-help + cockpit + cockpit-help + cogl + cogl-help + color-filesystem + containers-common + container-selinux + coreutils + coreutils-help + cpio + cpio-help + cracklib + cracklib-dicts + cracklib-help + crash + crash-help + createrepo_c + createrepo_c-help + cronie + cronie-help + crontabs + crontabs-help + crypto-policies + cryptsetup + cryptsetup-help + ctags + ctags-help + cups + cups-filters + cups-help + cups-libs + cups-pk-helper + curl + curl-help + cvs + cvs-help + cyrus-sasl + cyrus-sasl-gs2 + cyrus-sasl-help + cyrus-sasl-ldap + cyrus-sasl-lib + cyrus-sasl-md5 + cyrus-sasl-ntlm + cyrus-sasl-scram + dbus + dbus-glib + dbus-help + dbus-python-help + device-mapper + device-mapper-event + dhcp + dhcp-common + dhcp-libs + dhcp-server + dialog + dialog-help + diffstat + diffutils + diffutils-help + dim + dim_tools + dmidecode + dmraid + dmraid-events + dnf + dnf-data + dnf-plugins-core + dnsmasq + dnsmasq-help + dnsmasq-utils + docbook-dtds + docbook-style-xsl + docker-engine + runc + dos2unix + dosfstools + dosfstools-help + dracut + dracut-caps + dracut-config-generic + dracut-config-rescue + dracut-network + dracut-tools + dropwatch + drpm + drpm-devel + drpm-help + e2fsprogs + e2fsprogs-devel + e2fsprogs-help + ed + edk2-devel + edk2-help + efibootmgr + efibootmgr-help + efivar + efivar-help + elfutils + elfutils-devel + ethtool + ethtool-help + exempi + exempi-help + expat + expat-devel + expat-help + expect + expect-help + file + file-help + file-libs + filesystem + findutils + findutils-help + fipscheck + fipscheck-help + firewalld + firewalld-doc + firewalld-filesystem + flex + freetype + freetype-help + ftp + ftp-help + fuse + fuse-help + fxload + fxload-help + gawk + gawk-help + gcc-gfortran + gcr + gdb + gdb-help + gdbm + gdbm-devel + gdbm-help + gdk-pixbuf2 + gdk-pixbuf2-help + genisoimage + geoclue2-libs + geocode-glib + geocode-glib-help + GeoIP + GeoIP-help + gettext + gettext-help + gettext-libs + git + git-clang-format + git-help + gjs + glib2 + glib2-help + glibc + glibc-all-langpacks + glibc-common + glibc-devel + glibc-help + glibc-locale-source + gmp + gnupg2 + gnupg2-help + gnupg2-smime + gnutls + gnutls-c++ + gnutls-help + gobject-introspection + gobject-introspection-help + golang + golang-devel + golang-help + gperftools + gperftools-devel + gperftools-libs + gpgme + gpgme-help + grep + grilo + grilo-help + groff + groff-help + grpc + grpc-devel + grpc-plugins + grub2-common + grub2-help + grub2-tools + grubby + grubby-help + gssproxy + gssproxy-help + gzip + gzip-help + haveged + haveged-help + hdf5 + hdf5-devel + hdparm + hdparm-help + hostname + httpd + httpd-help + httpd-tools + http-parser + http-parser-devel + http-parser-help + hunspell + hunspell-en-help + hunspell-help + hwdata + hwinfo + hwinfo-help + hwloc-gui + i2c-tools-eepromer + i2c-tools-help + ima-evm-utils + ima-evm-utils-help + info + initscripts + iotop + iotop-help + ipcalc + ipcalc-help + ipmitool + ipmitool-help + iproute + iproute-help + iprutils + iprutils-help + ipset + ipset-help + ipset-libs + iptables + iptraf-ng + iptraf-ng-help + iptstate + iptstate-help + iputils + iputils-help + ipvsadm + ipvsadm-help + irqbalance + irqbalance-help + iSulad + ivtv-firmware + iw + iw-help + jansson + jansson-help + java-1.8.0-openjdk + java-1.8.0-openjdk-devel + java-1.8.0-openjdk-headless + json-c + json-c-help + json-glib + json-glib-help + kbd + kbd-help + kbd-legacy + kbd-misc + keepalived + kernel + kernel-devel + kernel-source + kernel-tools + kernel-tools-libs + kernel-tools-libs-devel + kexec-tools + kexec-tools-help + keyutils + keyutils-help + keyutils-libs-devel + kiwi-help + kiwi-tools + kmod + kmod-help + kpartx + kpatch + kpatch-help + kpatch-runtime + krb5 + krb5-client + krb5-devel + krb5-help + krb5-server + lapack + lapack-devel + libisula + ldns + ldns-help + less + less-help + lftp + lftp-help + libacl + libaio + libaio-devel + libarchive + libarchive-help + libassuan + libassuan-help + libbasicobjects + libblkid + libbonobo + libbonobo-help + libcanberra-gtk2 + libcanberra-help + libcap + libcap-help + libcap-ng + libcap-ng-help + libcap-ng-python3 + libcgroup + libcgroup-devel + libcgroup-help + libcollection + libcomps + libcomps-help + libconfig + libcurl + libdaemon + libdaemon-help + libdb + libdb-cxx + libdb-devel + libdbi + libdbi-help + libdb-sql + libdb-tcl + libdb-utils + libdhash + libdmx + libdmx-help + libdnet-devel + libdnet-help + libdnet-progs + libdnf + libecap + libecap-help + libedit + libedit-devel + libedit-help + liberation-fonts + libesmtp + libesmtp-help + libestr + libevdev + libevdev-help + libevent + libevent-devel + libevhtp-devel + libexif + libexif-help + libfastjson + libfdisk + libffi + libffi-help + libgcc + libgcrypt + libgcrypt-help + libgee + libgee-help + libgmem + libgnomekbd + libgomp + libgpg-error + libgsf + libgsf-help + libgtop2 + libgtop2-help + libgweather + libgweather-help + libgxps + libgxps-help + libical + libicu-devel + libidn + libidn2 + libidn2-help + libimobiledevice + libimobiledevice-help + libini_config + libiptcdata + libiscsi + libiscsi-help + libkadm5 + libkcapi + libkcapi-help + libkcapi-hmaccalc + libksba + libksba-help + libldb + libldb-help + libmaxminddb + libmaxminddb-help + libmediaart + libmediaart-help + libmetalink + libmetalink-help + libmng + libmng-help + libmnl + libmnl-static + libmodulemd + libmount + libmspack + libmspack-help + libndp + libndp-help + libnetfilter_conntrack + libnetfilter_queue + libnfnetlink + libnfnetlink-help + libnftnl + libnghttp2 + libnl3 + libnl3-cli + libnl3-devel + libnl3-help + libnma + libnsl2 + liboauth + liboauth-help + libogg + libogg-help + libosinfo + libosinfo-help + libpath_utils + libpcap + libpcap-devel + libpcap-help + libpciaccess + libpipeline + libpipeline-help + libpkgconf + libplist + libpng + libpng-help + libpsl + libpsl-help + libpwquality + libpwquality-help + libref_array + librepo + libreport-filesystem + libreport-help + libsamplerate + libseccomp + libseccomp-help + libsecret + libsecret-help + libselinux + libselinux-devel + libselinux-help + libselinux-utils + libsemanage + libsemanage-help + libsepol + libsepol-help + libsexy + libsexy-help + libsigsegv + libsmartcols + libsolv + libsolv-help + libssh + libssh2 + libssh2-help + libssh-help + libsss_autofs + libsss_certmap + libsss_idmap + libsss_nss_idmap + libsss_sudo + libstdc++ + libtalloc + libtalloc-help + libtasn1 + libtasn1-help + libtdb + libtdb-help + libteam + libteam-help + libtevent + libtevent-help + libthai + libthai-static + libtirpc + libtirpc-help + libtool-ltdl + libtool-help + libunistring + libunistring-help + libunwind + libunwind-help + libusal + libusb + libusbmuxd + libusbx + libuser + libuser-help + libuser-python3 + libutempter + libutempter-help + libuuid + libverto + libverto-devel + libverto-glib + libverto-libevent + libvirt + libvirt-client + libvirt-daemon + libvirt-daemon-config-network + libvirt-daemon-config-nwfilter + libvirt-daemon-driver-interface + libvirt-daemon-driver-network + libvirt-daemon-driver-nodedev + libvirt-daemon-driver-nwfilter + libvirt-daemon-driver-qemu + libvirt-daemon-driver-secret + libvirt-daemon-driver-storage + libvirt-daemon-driver-storage-core + libvirt-daemon-driver-storage-disk + libvirt-daemon-driver-storage-gluster + libvirt-daemon-driver-storage-iscsi + libvirt-daemon-driver-storage-iscsi-direct + libvirt-daemon-driver-storage-logical + libvirt-daemon-driver-storage-mpath + libvirt-daemon-driver-storage-rbd + libvirt-daemon-driver-storage-scsi + libvirt-daemon-kvm + libvirt-daemon-qemu + libvirt-devel + libvirt-docs + libvirt-libs + libvirt-nss + libwacom + libwacom-data + libwebsockets + libwebsockets-devel + libwebsockets-help + libwnck3 + libwnck3-help + libX11 + libX11-help + libx86emu + libxcrypt + libxcrypt-help + libXdmcp + libXdmcp-help + libXfont2 + libXfont2-help + libxkbcommon + libxkbcommon-x11 + libxkbfile + libxklavier + libxklavier-help + libxml2 + libxml2-help + libxslt + libxslt-help + libXvMC + libXvMC-help + libXxf86dga + libXxf86dga-help + libyaml + libyaml-help + linux-firmware + linux-firmware-ath + linux-firmware-cypress + linux-firmware-iwlwifi + linux-firmware-libertas + linux-firmware-mediatek + linux-firmware-mrvl + linux-firmware-netronome + linux-firmware-ti-connectivity + llvm + llvm-devel + llvm-doc + llvm-googletest + llvm-libs + llvm-static + llvm-test + lm_sensors + lm_sensors-devel + lm_sensors-help + lm_sensors-sensord + lockdev + lockdev-help + logrotate + logrotate-help + lshw + lshw-help + lsof + lsof-help + lsscsi + lsscsi-help + lua + lua-expat + lua-expat-help + lua-help + lua-socket + lua-socket-help + lvm2 + lvm2-help + lxc + lxc-devel + lxcfs + lxcfs-tools + lxc-help + lz4 + lz4-help + lz4-libs + lz4-devel + lzo + lzo-help + lzo-minilzo + lzop + lzop-help + m4 + m4-help + mailcap + mailcap-help + mailx + mailx-help + make + make-help + man-db + man-pages + mcstrans + mcstrans-help + mdadm + mdadm-help + mesa-filesystem + mesa-libGLES + mesa-libxatracker + metacity + metacity-help + mlocate + mlocate-help + mobile-broadband-provider-info + mobile-broadband-provider-info-help + mod_ldap + mod_md + mod_proxy_html + mod_session + mod_ssl + mozilla-filesystem + mpfr + mtdev + mtools + mtools-help + mtr + mtr-help + multipath-tools + multipath-tools-help + mysql + ncompress + ncompress-help + ncurses + ncurses-devel + ncurses-help + ndisc6 + netcf + netcf-help + netconsole-service + net-snmp + net-snmp-devel + net-snmp-help + nettle + nettle-help + net-tools + net-tools-help + NetworkManager + NetworkManager-help + NetworkManager-libnm + network-scripts + newt + newt-devel + newt-help + nfs4-acl-tools + nfs4-acl-tools-help + nfs-utils + nfs-utils-help + nftables + nftables-help + nmap + nmap-help + nm-connection-editor + notification-daemon + notification-daemon-help + npth + nss + nss-help + nss-mdns + nss-mdns-help + nss-pam-ldapd + nss-pam-ldapd-help + nss-pem + nss-softokn + ntp + ntp-help + numactl + numactl-devel + numactl-libs + numad + numad-help + oddjob + oddjob-help + openblas-serial + openblas-threads + openEuler-indexhtml + openEuler-logos + openEuler-release + OpenIPMI + OpenIPMI-devel + OpenIPMI-perl + open-iscsi + open-iscsi-help + open-isns-help + openjpeg2 + openjpeg2-help + openldap + openldap-clients + openldap-help + openldap-servers + opensc + opensc-help + openslp + openslp-help + openssh + openssh-askpass + openssh-clients + openssh-help + openssh-keycat + openssh-server + openssl + openssl-devel + openssl-help + openssl-pkcs11 + openvpn + openvpn-devel + openvpn-help + openvswitch + openvswitch-devel + opus + opus-help + ORBit2 + orc + orc-help + osinfo-db + osinfo-db-tools + osinfo-db-tools-help + os-prober + p11-kit + p11-kit-help + p11-kit-trust + pam + pam_cifscreds + pam_ssh_agent_auth + pam-help + parted + passwd + passwd-help + patch + patch-help + pciutils + pciutils-devel + pciutils-help + pcre + pcre2 + pcre2-help + pcre-devel + pcre-help + pcre-tools + pcsc-lite + pcsc-lite-help + perf + perl + perl-Compress-Raw-Bzip2 + perl-Compress-Raw-Bzip2-help + perl-Compress-Raw-Zlib + perl-Compress-Raw-Zlib-help + perl-DBD-MySQL + perl-DBD-MySQL-help + perl-DBD-SQLite + perl-DBD-SQLite-help + perl-devel + perl-Devel-PPPort + perl-Devel-PPPort-help + perl-ExtUtils-Install + perl-ExtUtils-Install-help + perl-ExtUtils-MakeMaker + perl-ExtUtils-MakeMaker-help + perl-ExtUtils-Manifest + perl-ExtUtils-Manifest-help + perl-ExtUtils-ParseXS + perl-ExtUtils-ParseXS-help + perl-Filter + perl-Filter-help + perl-Filter-Simple-help + perl-help + perl-IO-Compress + perl-IO-Compress-help + perl-List-MoreUtils + perl-List-MoreUtils-help + perl-List-MoreUtils-XS-help + perl-Net-Daemon + perl-Net-Daemon-help + perl-Test-Harness + perl-Test-Harness-help + perl-Thread-Queue + perl-Thread-Queue-help + perl-Time-HiRes + perl-Time-HiRes-help + perl-XML-Parser + perl-XML-Parser-help + perl-XML-Writer + perl-XML-Writer-help + pigz + pigz-help + pinentry + pinentry-help + pkcs11-helper + pkcs11-helper-devel + pkcs11-helper-help + pkgconf + pkgconf-help + plymouth + plymouth-help + policycoreutils + policycoreutils-help + polkit + polkit-help + polkit-libs + polkit-pkla-compat + polkit-pkla-compat-help + poppler-cpp + poppler-data + poppler-glib + poppler-help + popt + popt-devel + popt-help + postfix + postfix-help + ppp + ppp-help + pprof + procmail + procmail-help + procps-ng + procps-ng-devel + procps-ng-i18n + protobuf + protobuf-devel + protobuf-lite + protobuf-lite-devel + psmisc + publicsuffix-list + pulseaudio + pulseaudio-help + python3 + python3-aniso8601 + python3-click + python3-configobj + python3-dateutil + python3-dbus + python3-decorator + python3-devel + python3-dict2xml + python3-dmidecode + python3-dnf + python3-dnf-plugins-core + python3-edk2-devel + python3-ethtool + python3-firewall + python3-flask + python3-flask-restful + python3-gobject-base + python3-gpg + python3-hawkey + python3-i2c-tools + python3-iniparse + python3-inotify + python3-itsdangerous + python3-jinja2 + python3-joblib + python3-jsonpatch + python3-jsonpointer + python3-libcomps + python3-libdnf + python3-librepo + python3-libs + python3-libselinux + python3-libvirt + python3-libxml2 + python3-linux-procfs + python3-net-snmp + python3-newt + python3-numpy + python3-openipmi + python3-pandas + python3-perf + python3-pip + python3-pyatspi + python3-pycurl + python3-pyOpenSSL + python3-pyparsing + python3-pyudev + python3-pyxattr + python3-rpm + python3-rtslib + python3-schedutils + python3-scikit-learn + python3-scikit-optimize + python3-scipy + python3-setuptools + python3-six + python3-slip + python3-sssdconfig + python3-talloc + python3-unbound + python3-urlgrabber + python3-werkzeug + python3-xgboost + qemu + qemu-guest-agent + qemu-help + qemu-img + qpdf + qrencode + qrencode-help + quota + quota-help + rarian + rarian-help + rasdaemon + rdate + rdate-help + readline + readline-help + readonly-root + realmd + realmd-help + recode + recode-help + rootfiles + rpcbind + rpcbind-help + rpm + rpm-build-libs + rpm-cron + rpm-devel + rpmdevtools + rpmdevtools-help + rpm-help + rpm-libs + rpm-plugin-selinux + rpm-plugin-systemd-inhibit + rpmrebuild + rpmrebuild-help + rsync + rsync-help + rsyslog + rsyslog-crypto + rsyslog-elasticsearch + rsyslog-help + rsyslog-mmaudit + rsyslog-mmjsonparse + rsyslog-mmsnmptrapd + rsyslog-mysql + rsyslog-snmp + rsyslog-gnutls + rtkit + rtkit-help + samba-common-tools + samba-help + sbc + sbc-help + screen + screen-help + sdparm + sdparm-help + sed + sed-help + selinux-policy + selinux-policy-minimum + selinux-policy-sandbox + selinux-policy-targeted + sendmail + sendmail-help + setools-console + setools-help + setserial + setserial-help + setup + sg3_utils + sg3_utils-help + sgml-common + sgml-common-help + shadow-help + shadow + shared-mime-info + shared-mime-info-help + sharutils + sharutils-help + slang + slang-devel + slang-help + smartmontools + smartmontools-help + smp_utils + smp_utils-help + snappy + snappy-devel + snappy-help + source-highlight + source-highlight-help + speex + speex-help + sqlite + sqlite-help + squashfs-tools + squid + sssd + sssd-client + sssd-help + sssd-nfs-idmap + strace + strongswan + sudo + sudo-help + symlinks + syscontainer-tools + sysfsutils + sysfsutils-help + sysstat + systemd + systemd-devel + systemd-help + systemd-libs + systemd-pam + systemd-udev + systemtap-help + systemtap-sdt-devel + taglib + taglib-help + tar + tar-help + tcl + tcl-help + tcpdump + tcpdump-help + tcp_wrappers + tcp_wrappers-help + tcp_wrappers-libs + tcpdump + tcpdump-help + tcsh + tcsh-help + telepathy-filesystem + telepathy-glib + telepathy-logger + telepathy-logger-help + telnet + telnet-help + tftp + tftp-help + tftp-server + thin-provisioning-tools + thin-provisioning-tools-help + tigervnc + tigervnc-server-minimal + time + timedatex + timedatex-help + time-help + tipcutils + tipcutils-help + tk + tk-help + tmux + tmux-help + totem-pl-parser + totem-pl-parser-help + tpm2-abrmd + tpm2-abrmd-help + tpm2-tools + tpm2-tools-help + tpm2-tss + tpm2-tss-help + traceroute + traceroute-help + tree + tree-help + trousers + trousers-help + trousers-lib + tuned + tuned-help + tzdata + unbound-libs + unzip + unzip-help + upower + usbredir + usbredir-help + usbutils + usbutils-help + usermode + usermode-help + userspace-rcu + ustr + ustr-help + util-linux + vim-enhanced + vim-minimal + vino + vino-help + virt-what + virt-what-help + vsftpd + vsftpd-help + wget + wget-help + which + which-help + wpa_supplicant + wpa_supplicant-help + wqy-microhei-fonts + wqy-microhei-fonts-help + wqy-zenhei-fonts + xfsprogs + xfsprogs-help + xinetd + xinetd-help + xkeyboard-config + xkeyboard-config-help + xmlsec1-help + xmlsec1-openssl + xmlto + xmlto-help + xterm + xterm-help + xvattr + xvattr-help + xz + xz-devel + xz-help + xz-libs + xz-lzma-compat + ypbind + ypbind-help + ypserv + ypserv-help + yp-tools + yp-tools-help + yum + zip + zip-help + zlib + zlib-devel + zlib-help + zsh + zstd-help + zstd-devel + zziplib-help + zziplib-utils + unixODBC-devel + jemalloc-devel + + + + grub2-efi-aa64 + grub2-efi-aa64-cdboot + grub2-efi-aa64-modules + shim + kubernetes + kubernetes-client + kubernetes-help + kubernetes-kubeadm + kubernetes-kubelet + kubernetes-master + kubernetes-node + kubeedge-cloudcore + kubeedge-edgecore + kubeedge-edgesite + kubeedge-keadm + + + grub2-pc + grub2-pc-modules + grub2-efi-x64 + shim + kubernetes + kubernetes-client + kubernetes-help + kubernetes-kubeadm + kubernetes-kubelet + kubernetes-master + kubernetes-node + kubeedge-cloudcore + kubeedge-edgecore + kubeedge-edgesite + kubeedge-keadm + + + grub2-common + grub2-tools-minimal + grub2-tools-extra + grub2-tools + grub2-help + lvm2-help + lvm2 + mdadm + mdadm-help + dosfstools-help + dosfstools + + -- Gitee From 5f8452481f84673dad77f2466a9e2e9fefeddb04 Mon Sep 17 00:00:00 2001 From: Wenlong Zhang Date: Tue, 28 May 2024 07:42:08 +0000 Subject: [PATCH 07/10] add livecd support for loongarch64 add ls2k500sfb.ko for loongarch64 --- add-loongarch64-support-for-livecd.patch | 416 +++++++++++++++++++++++ add-ls2k500sfb.ko-for-loongarch64.patch | 25 ++ oemaker.spec | 18 +- 3 files changed, 453 insertions(+), 6 deletions(-) create mode 100644 add-loongarch64-support-for-livecd.patch create mode 100644 add-ls2k500sfb.ko-for-loongarch64.patch diff --git a/add-loongarch64-support-for-livecd.patch b/add-loongarch64-support-for-livecd.patch new file mode 100644 index 0000000..552b342 --- /dev/null +++ b/add-loongarch64-support-for-livecd.patch @@ -0,0 +1,416 @@ +From a6cbb0da0f21b232dfc3386bc9f9986f6df51913 Mon Sep 17 00:00:00 2001 +From: Wenlong Zhang +Date: Tue, 28 May 2024 03:48:32 +0000 +Subject: [PATCH] add loongarch64 support for livecd + +--- + isomaker/config/common/livecd/live/efi.tmpl | 12 ++- + isomaker/config/loongarch64/ks.cfg | 28 ++++++ + .../live/config_files/loongarch64/boot.msg | 5 + + .../live/config_files/loongarch64/grub.conf | 9 ++ + .../config_files/loongarch64/grub2-efi.cfg | 47 ++++++++++ + .../loongarch64/livecd/live/loongarch64.tmpl | 75 +++++++++++++++ + .../loongarch64/livecd/livecd_loongarch64.ks | 70 ++++++++++++++ + isomaker/config/loongarch64/livecd/rpmlist | 91 +++++++++++++++++++ + 8 files changed, 334 insertions(+), 3 deletions(-) + create mode 100644 isomaker/config/loongarch64/ks.cfg + create mode 100644 isomaker/config/loongarch64/livecd/live/config_files/loongarch64/boot.msg + create mode 100644 isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub.conf + create mode 100644 isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub2-efi.cfg + create mode 100644 isomaker/config/loongarch64/livecd/live/loongarch64.tmpl + create mode 100644 isomaker/config/loongarch64/livecd/livecd_loongarch64.ks + create mode 100644 isomaker/config/loongarch64/livecd/rpmlist + +diff --git a/isomaker/config/common/livecd/live/efi.tmpl b/isomaker/config/common/livecd/live/efi.tmpl +index 9a57df4..e7a61a4 100644 +--- a/isomaker/config/common/livecd/live/efi.tmpl ++++ b/isomaker/config/common/livecd/live/efi.tmpl +@@ -11,9 +11,15 @@ mkdir ${EFIBOOTDIR}/fonts/ + install usr/share/shim/lockdown.efi ${EFIBOOTDIR}/ + %endif + %if efiarch64: +-install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI +-install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ +-install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi ++ %if efiarch64 == 'LOONGARCH64': ++ install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI ++ install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOTLOONGARCH.EFI ++ install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi ++ %else: ++ install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI ++ install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ ++ install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi ++ %endif + %endif + install boot/efi/EFI/*/fonts/unicode.pf2 ${EFIBOOTDIR}/fonts/ + +diff --git a/isomaker/config/loongarch64/ks.cfg b/isomaker/config/loongarch64/ks.cfg +new file mode 100644 +index 0000000..129d653 +--- /dev/null ++++ b/isomaker/config/loongarch64/ks.cfg +@@ -0,0 +1,28 @@ ++# version=openEuler 20.03 ++# System authorization information ++ ++# Use CDROM installation media ++# Use graphical install ++# Run the Setup Agent on first boot ++# Keyboard layouts ++keyboard --vckeymap=us --xlayouts='us' ++# System language ++ ++# Network information ++# Root password ++# System timezone ++timezone Asia/Shanghai --isUtc --nontp ++# System bootloader configuration ++# Partition clearing information ++ ++%packages --multilib ++@core ++glibc.i686 ++gcc ++gdb ++make ++%end ++ ++%post ++grub2-set-default 1 ++%end +diff --git a/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/boot.msg b/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/boot.msg +new file mode 100644 +index 0000000..ff54899 +--- /dev/null ++++ b/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/boot.msg +@@ -0,0 +1,5 @@ ++ ++splash.lss ++ ++ - Press the 0107 key to begin the installation process. ++ +diff --git a/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub.conf b/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub.conf +new file mode 100644 +index 0000000..0077343 +--- /dev/null ++++ b/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub.conf +@@ -0,0 +1,9 @@ ++#debug --graphics ++default=0 ++splashimage=@SPLASHPATH@ ++timeout 60 ++hiddenmenu ++title Start @PRODUCT@ @VERSION@ ++ findiso ++ kernel @KERNELPATH@ @ROOT@ rd.live.ram net.ifnames=0 biosdevname=0 rd.shell=0 ++ initrd @INITRDPATH@ +diff --git a/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub2-efi.cfg b/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub2-efi.cfg +new file mode 100644 +index 0000000..37ca171 +--- /dev/null ++++ b/isomaker/config/loongarch64/livecd/live/config_files/loongarch64/grub2-efi.cfg +@@ -0,0 +1,47 @@ ++set default="1" ++ ++function load_video { ++ if [ x$feature_all_video_module = xy ]; then ++ insmod all_video ++ else ++ insmod efi_gop ++ insmod efi_uga ++ insmod ieee1275_fb ++ insmod vbe ++ insmod vga ++ insmod video_bochs ++ insmod video_cirrus ++ fi ++} ++ ++load_video ++set gfxpayload=keep ++insmod gzio ++insmod part_gpt ++insmod ext2 ++insmod vfat ++ ++set timeout=60 ++### END /etc/grub.d/00_header ### ++ ++search --no-floppy --set=root -l '@ISOLABEL@' ++ ++### BEGIN /etc/grub.d/10_linux ### ++menuentry 'Install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ ro inst.geoloc=0 console=tty0 smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 video=efifb:off fpi_to_tail=off ++ initrd @INITRDPATH@ ++} ++menuentry 'Test this media & install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ rd.live.check inst.geoloc=0 console=tty0 smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 video=efifb:off fpi_to_tail=off ++ initrd @INITRDPATH@ ++} ++submenu 'Troubleshooting -->' { ++ menuentry 'Install @PRODUCT@ @VERSION@ in basic graphics mode' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ nomodeset inst.geoloc=0 console=tty0 smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 video=efifb:off fpi_to_tail=off ++ initrd @INITRDPATH@ ++ } ++ menuentry 'Rescue the @PRODUCT@ system' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ rescue console=tty0 smmu.bypassdev=0x1000:0x17 smmu.bypassdev=0x1000:0x15 video=efifb:off fpi_to_tail=off ++ initrd @INITRDPATH@ ++ } ++} +diff --git a/isomaker/config/loongarch64/livecd/live/loongarch64.tmpl b/isomaker/config/loongarch64/livecd/live/loongarch64.tmpl +new file mode 100644 +index 0000000..cc318f4 +--- /dev/null ++++ b/isomaker/config/loongarch64/livecd/live/loongarch64.tmpl +@@ -0,0 +1,75 @@ ++<%page args="kernels, runtime_img, basearch, inroot, outroot, product, isolabel"/> ++<% ++configdir="tmp/config_files/loongarch64" ++PXEBOOTDIR="images/pxeboot" ++KERNELDIR=PXEBOOTDIR ++LORAXDIR="usr/share/lorax/" ++LIVEDIR="LiveOS" ++ ++ ++from os.path import basename ++%> ++ ++## Test ${runtime_img} to see if udf is needed ++<% ++ import os ++ from pylorax.sysutils import joinpaths ++ if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3: ++ udfargs = "-allow-limited-size" ++ else: ++ udfargs = "" ++%> ++mkdir ${LIVEDIR} ++install ${runtime_img} ${LIVEDIR}/squashfs.img ++treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img ++ ++ ++## install kernels ++mkdir ${KERNELDIR} ++%for kernel in kernels: ++ ## normal loongarch64 ++ installkernel images-${basearch} ${kernel.path} ${KERNELDIR}/vmlinuz ++ installinitrd images-${basearch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img ++%endfor ++ ++ ++## WHeeeeeeee, EFI. ++## We could remove the basearch restriction someday.. ++<% efiargs=""; efigraft="" %> ++%if exists("boot/efi/EFI/*/grubloongarch64.efi"): ++ <% ++ efiarch32 = None ++ efiarch64 = 'LOONGARCH64' ++ efigraft="EFI/BOOT={0}/EFI/BOOT".format(outroot) ++ images = ["images/efiboot.img"] ++ %> ++ %for img in images: ++ <% ++ efiargs += " -eltorito-alt-boot -e {0} -no-emul-boot".format(img) ++ efigraft += " {0}={1}/{0}".format(img,outroot) ++ %> ++ treeinfo images-${basearch} ${img|basename} ${img} ++ %endfor ++ <%include file="efi.tmpl" args="configdir=configdir, KERNELDIR=KERNELDIR, efiarch32=efiarch32, efiarch64=efiarch64, isolabel=isolabel"/> ++%endif ++ ++# Create optional product.img and updates.img ++<% filegraft=""; images=["product", "updates"] %> ++%for img in images: ++ %if exists("%s/%s/" % (LORAXDIR, img)): ++ installimg ${LORAXDIR}/${img}/ images/${img}.img ++ treeinfo images-${basearch} ${img}.img images/${img}.img ++ <% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> ++ %endif ++%endfor ++ ++%if exists("boot/efi/EFI/*/grubloongarch64.efi"): ++## make boot.iso ++runcmd mkisofs -o ${outroot}/images/boot.iso \ ++ ${efiargs} -R -J -V '${isolabel}' -T ${udfargs} \ ++ -graft-points \ ++ ${KERNELDIR}=${outroot}/${KERNELDIR} \ ++ ${LIVEDIR}=${outroot}/${LIVEDIR} \ ++ ${efigraft} ${filegraft} ++treeinfo images-${basearch} boot.iso images/boot.iso ++%endif +diff --git a/isomaker/config/loongarch64/livecd/livecd_loongarch64.ks b/isomaker/config/loongarch64/livecd/livecd_loongarch64.ks +new file mode 100644 +index 0000000..192c4b1 +--- /dev/null ++++ b/isomaker/config/loongarch64/livecd/livecd_loongarch64.ks +@@ -0,0 +1,70 @@ ++# Minimal Disk Image ++# ++# Firewall configuration ++firewall --enabled ++# Use network installation ++url --url="INSTALL_REPO" ++# Root password ++rootpw --iscrypted ROOT_PWD ++ ++# Network information ++network --bootproto=dhcp --onboot=on --activate ++# System keyboard ++keyboard --xlayouts=us --vckeymap=us ++# System language ++lang en_US.UTF-8 ++# SELinux configuration ++selinux --enforcing ++# Installation logging level ++logging --level=info ++# Shutdown after installation ++shutdown ++# System timezone ++timezone Asia/Beijing ++# System bootloader configuration ++bootloader --location=mbr ++# Clear the Master Boot Record ++zerombr ++# Partition clearing information ++clearpart --all ++# Disk partitioning information ++part / --fstype="ext4" --size=40000 ++part swap --size=1000 ++%pre ++#!/bin/bash ++mkdir -p /mnt/sysimage/usr/lib64/ ++chmod 0755 /mnt/sysimage/usr/lib64/ ++cp /usr/lib64/libbep_env.so /mnt/sysimage/usr/lib64 ++%end ++%post ++ ++touch /etc/sysconfig/network ++ ++cat << EOF > /etc/sysconfig/network-scripts/ifcfg-eth0 ++TYPE=Ethernet ++BOOTPROTO=dhcp ++NAME=eth0 ++DEVICE=eth0 ++ONBOOT=yes ++EOF ++ ++rm -rf /etc/systemd/system/multi-user.target.wants/kbox.service ++rm -rf /etc/systemd/system/multi-user.target.wants/kdump.service ++rm -rf /usr/lib/systemd/system/kbox.service ++rm -rf /usr/lib/systemd/system/kdump.service ++rm -rf /boot/initramfs* ++ ++#fix shadows and shadows- time field ++awk 'BEGIN{FS=OFS=":"} {$3=18099; print $0 > "/etc/shadow"}' /etc/shadow; ++awk 'BEGIN{FS=OFS=":"} {$3=18099; print $0 > "/etc/shadow-"}' /etc/shadow-; ++ ++#fix /etc/pki/ca-trust/extracted/java/cacerts time field ++rm /etc/pki/ca-trust/extracted/java/cacerts ++/usr/bin/ca-legacy install ++/usr/bin/update-ca-trust ++ ++ ++%end ++ ++%packages --excludedocs ++%end +diff --git a/isomaker/config/loongarch64/livecd/rpmlist b/isomaker/config/loongarch64/livecd/rpmlist +new file mode 100644 +index 0000000..2eb4ac9 +--- /dev/null ++++ b/isomaker/config/loongarch64/livecd/rpmlist +@@ -0,0 +1,91 @@ ++NetworkManager ++NetworkManager-config-server ++abattis-cantarell-fonts ++audit ++authselect ++basesystem ++bash ++bind ++bind-dnssec-utils ++boost-iostreams ++coreutils ++cronie ++cryptsetup ++curl ++dejavu-fonts ++dnf ++dnf-plugins-core ++dosfstools ++dracut-config-generic ++dracut-config-rescue ++dracut-live ++dracut-network ++e2fsprogs ++filesystem ++fipscheck ++firewalld ++glibc ++grub2-efi-loongarch64 ++grub2-efi-loongarch64-cdboot ++grubby ++hostname ++initscripts ++ipmitool ++iproute ++iprutils ++iputils ++irqbalance ++kbd ++kernel ++kernel-tools ++kexec-tools ++less ++libX11 ++libdaemon ++libnet ++libteam ++linux-firmware ++lshw ++lsscsi ++lvm2 ++man-db ++ncurses ++net-snmp ++openEuler-latest-release ++openEuler-logos ++openEuler-release ++openssh ++openssh-clients ++openssh-server ++parted ++passwd ++policycoreutils ++procps-ng ++python3-decorator ++python3-ply ++python3-slip ++rdma-core ++rng-tools ++rootfiles ++rpm ++rsync ++rsyslog ++samba-client ++samba-libs ++security-tool ++selinux-policy-mls ++selinux-policy-targeted ++setup ++sg3_utils ++shadow ++sssd ++sudo ++sysfsutils ++systemd ++tuned ++unzip ++util-linux ++vim-minimal ++wget ++xfsprogs ++yum +-- +2.43.0 + diff --git a/add-ls2k500sfb.ko-for-loongarch64.patch b/add-ls2k500sfb.ko-for-loongarch64.patch new file mode 100644 index 0000000..07a101b --- /dev/null +++ b/add-ls2k500sfb.ko-for-loongarch64.patch @@ -0,0 +1,25 @@ +From b1feb98d22f577432d226aeadfc0133b72104b3a Mon Sep 17 00:00:00 2001 +From: Wenlong Zhang +Date: Thu, 30 May 2024 09:40:38 +0000 +Subject: [PATCH] add ls2k500sfb.ko for loongarch64 + +--- + isomaker/80-openeuler/runtime-cleanup.tmpl | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/isomaker/80-openeuler/runtime-cleanup.tmpl b/isomaker/80-openeuler/runtime-cleanup.tmpl +index 256d013..8d4b423 100644 +--- a/isomaker/80-openeuler/runtime-cleanup.tmpl ++++ b/isomaker/80-openeuler/runtime-cleanup.tmpl +@@ -106,7 +106,7 @@ removekmod sound drivers/media drivers/hwmon \ + removekmod drivers/char --allbut virtio_console hw_random \ + virtio-rng ipmi hmcdrv + removekmod drivers/hid --allbut hid-logitech-dj hid-logitech-hidpp +-removekmod drivers/video --allbut hyperv_fb syscopyarea sysfillrect sysimgblt fb_sys_fops ++removekmod drivers/video --allbut hyperv_fb syscopyarea sysfillrect sysimgblt fb_sys_fops ls2k500sfb + remove lib/modules/*/{build,source,*.map} + ## NOTE: depmod gets re-run after cleanup finishes + +-- +2.43.0 + diff --git a/oemaker.spec b/oemaker.spec index 8c5c869..af2c9b5 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -15,7 +15,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 10 +Release: 11 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -41,7 +41,8 @@ Patch0002: add-openEuler_repo.conf-for-loongarch64.patch %ifarch riscv64 Patch0003: 0001-add-riscv64-support.patch %endif - +Patch0004: add-loongarch64-support-for-livecd.patch +Patch0005: add-ls2k500sfb.ko-for-loongarch64.patch %description a building tool for DVD ISO making and ISO cutting @@ -123,11 +124,9 @@ install -m 700 %{name}/isomaker/rpm.sh %{buildroot}/opt/oemaker/rpm.sh install -m 700 %{name}/isomaker/env_record.sh %{buildroot}/opt/oemaker/env_record.sh install -m 700 %{name}/isomaker/env_restore.sh %{buildroot}/opt/oemaker/env_restore.sh install -m 400 %{name}/isomaker/config/rpmlist.xml %{buildroot}/opt/oemaker/config/rpmlist.xml -%ifnarch loongarch64 install -m 640 %{name}/isomaker/config/${sys_arch}/livecd/live/config_files/${sys_arch}/* %{buildroot}/opt/oemaker/config/${sys_arch}/livecd/live/config_files/${sys_arch}/ install -m 400 %{name}/isomaker/config/${sys_arch}/livecd/livecd_${sys_arch}.ks %{buildroot}/opt/oemaker/config/${sys_arch}/livecd/livecd_${sys_arch}.ks install -m 600 %{name}/isomaker/config/${sys_arch}/livecd/rpmlist %{buildroot}/opt/oemaker/config/${sys_arch}/livecd/rpmlist -%endif install -m 400 %{name}/isomaker/config/${sys_arch}/desktop_normal.xml %{buildroot}/opt/oemaker/config/${sys_arch}/desktop_normal.xml install -m 400 %{name}/isomaker/config/${sys_arch}/edge_normal.xml %{buildroot}/opt/oemaker/config/${sys_arch}/edge_normal.xml install -m 400 %{name}/isomaker/config/${sys_arch}/normal.xml %{buildroot}/opt/oemaker/config/${sys_arch}/normal.xml @@ -139,10 +138,12 @@ install -m 400 %{name}/isomaker/config/x86_64/ks.cfg %{buildroot}/opt/oemaker/co %ifarch aarch64 install -m 700 %{name}/isomaker/config/aarch64/livecd/live/aarch64.tmpl %{buildroot}/opt/oemaker/config/aarch64/livecd/live/aarch64.tmpl %endif -%ifnarch loongarch64 +%ifarch loongarch64 +install -m 700 %{name}/isomaker/config/loongarch64/livecd/live/loongarch64.tmpl %{buildroot}/opt/oemaker/config/loongarch64/livecd/live/loongarch64.tmpl +install -m 400 %{name}/isomaker/config/loongarch64/ks.cfg %{buildroot}/opt/oemaker/config/loongarch64/ks.cfg +%endif install -m 700 %{name}/isomaker/config/common/livecd/live/* %{buildroot}/opt/oemaker/config/common/livecd/live/ install -m 400 %{name}/isomaker/config/common/livecd/root_pwd %{buildroot}/opt/oemaker/config/common/livecd/root_pwd -%endif %ifarch riscv64 install -m 700 %{name}/isomaker/config/riscv64/livecd/live/riscv64.tmpl %{buildroot}/opt/oemaker/config/riscv64/livecd/live/riscv64.tmpl %endif @@ -213,6 +214,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Wed May 29 2024 Wenlong Zhang - 3.1.0-11 +- ID:NA +- SUG:NA +- DESC: add livecd for loongarch64, add ls2k500sfb.ko for loongarch64 + * Tue May 28 2024 Ouuleilei - 3.1.0-10 - add riscv64 support -- Gitee From 762e3d576253eb03572c5b0842cb5db28d05f67a Mon Sep 17 00:00:00 2001 From: jiahua_yu Date: Mon, 24 Jun 2024 15:23:25 +0800 Subject: [PATCH 08/10] init support for arch ppc64le --- 0001-init-support-for-arch-ppc64le.patch | 146 ++ 0002-add-config-for-arch-ppc64le.patch | 1247 ++++++++++++++ ...-support-for-ppc64le-runtime-install.patch | 43 + edge_normal_ppc64le.xml | 157 ++ normal_ppc64le.xml | 1534 +++++++++++++++++ oemaker-3.1.0.tar.gz | Bin 128587 -> 146959 bytes oemaker.spec | 27 +- rpmlist_ppc64le.xml | 1405 +++++++++++++++ 8 files changed, 4558 insertions(+), 1 deletion(-) create mode 100644 0001-init-support-for-arch-ppc64le.patch create mode 100644 0002-add-config-for-arch-ppc64le.patch create mode 100644 0003-add-support-for-ppc64le-runtime-install.patch create mode 100644 edge_normal_ppc64le.xml create mode 100644 normal_ppc64le.xml create mode 100644 rpmlist_ppc64le.xml diff --git a/0001-init-support-for-arch-ppc64le.patch b/0001-init-support-for-arch-ppc64le.patch new file mode 100644 index 0000000..bd1138e --- /dev/null +++ b/0001-init-support-for-arch-ppc64le.patch @@ -0,0 +1,146 @@ +From e1c79ca3f09be156d54e98b5733da3290951cc44 Mon Sep 17 00:00:00 2001 +From: jiahua_yu +Date: Mon, 24 Jun 2024 16:58:24 +0800 +Subject: [PATCH 1/3] init support for arch ppc64le + +--- + isocut/isocut.py | 7 +++++++ + isomaker/init.sh | 2 +- + isomaker/iso.sh | 27 +++++++++++++++++++++++++++ + 3 files changed, 35 insertions(+), 1 deletion(-) + +diff --git a/isocut/isocut.py b/isocut/isocut.py +index 8578f83..6332f4e 100755 +--- a/isocut/isocut.py ++++ b/isocut/isocut.py +@@ -442,6 +442,8 @@ def regen_repodata(): + pack.text = pack.text.split(".aarch64")[0] + elif os.uname()[-1].strip() == 'loongarch64': + pack.text = pack.text.split(".loongarch64")[0] ++ elif os.uname()[-1].strip() == 'ppc64le'[0]: ++ pack.text = pack.text.split(".ppc64le")[0] + pack.text = pack.text.split(".noarch")[0] + fp_rpm.close() + +@@ -687,6 +689,11 @@ def remake_iso(): + "-joliet-long -allow-multidot -allow-leading-dots -no-bak -V \"%s\" " \ + "-o \"%s\" -e images/efiboot.img -no-emul-boot \"%s\"" % ( + ICONFIG.new_iso_name, ICONFIG.dest_iso, ICONFIG.temp_path_new_image) ++ elif os.uname()[-1].strip() == 'ppc64le': ++ make_iso_cmd = "genisoimage -joliet-long -U -J -R -T -part -hfs -r -l -sysid PPC " \ ++ "-V \"%s\" -o \"%s\" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 " \ ++ "-no-desktop -allow-multidot " % ( ++ ICONFIG.iso_desc, ICONFIG.dest_iso, ICONFIG.temp_path_new_image) + dest_iso_path = os.path.dirname(ICONFIG.dest_iso) + if not (dest_iso_path is None or dest_iso_path == + "") and not os.path.exists(dest_iso_path): +diff --git a/isomaker/init.sh b/isomaker/init.sh +index f3222ec..00aadd3 100644 +--- a/isomaker/init.sh ++++ b/isomaker/init.sh +@@ -35,7 +35,7 @@ function parse_cmd_line() + { + #param init + ARCH="$(uname -m)" +- if [ "${ARCH}" = "aarch64" ] || [ "${ARCH}" = "x86_64" ] || [ "${ARCH}" = "loongarch64" ];then ++ if [ "${ARCH}" = "aarch64" ] || [ "${ARCH}" = "x86_64" ] || [ "${ARCH}" = "loongarch64" ] || [ "${ARCH}" = "ppc64le" ];then + CONFIG_FILE="${CPATH}/config/${ARCH}/standard.conf" + source "${CONFIG_FILE}" + else +diff --git a/isomaker/iso.sh b/isomaker/iso.sh +index 7bf0bf9..211a8ed 100644 +--- a/isomaker/iso.sh ++++ b/isomaker/iso.sh +@@ -29,6 +29,9 @@ function gen_debug_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DBG_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${DBG_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 "${OUTPUT_DIR}/${DBG_ISO_NAME}" + return 0 +@@ -43,6 +46,9 @@ function gen_standard_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" + return 0 +@@ -60,6 +66,9 @@ function gen_edge_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${EDGE_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 "${OUTPUT_DIR}/${EDGE_ISO_NAME}" + return 0 +@@ -77,6 +86,9 @@ function gen_desktop_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DESKTOP_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 "${OUTPUT_DIR}/${DESKTOP_ISO_NAME}" + return 0 +@@ -94,6 +106,9 @@ function gen_src_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${SRC_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + return 0 + } +@@ -113,6 +128,9 @@ function gen_everything_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 /result/"${EVE_ISO_NAME}" + return 0 +@@ -132,6 +150,9 @@ function gen_everything_debug_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_DEBUG_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 /result/"${EVE_DEBUG_ISO_NAME}" + return 0 +@@ -151,6 +172,9 @@ function gen_everything_src_iso() + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${EVE_SRC_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso + [ $? != 0 ] && return 1 ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 /result/"${EVE_SRC_ISO_NAME}" + return 0 +@@ -164,6 +188,9 @@ function gen_netinst_iso() + isohybrid -u /result/"${NETINST_ISO_NAME}" + elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then + mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${NETINST_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso ++ elif [ "$ARCH" == "ppc64le" ]; then ++ mkisofs -joliet-long -U -J -R -T -o "${OUTPUT_DIR}/${STANDARD_ISO_NAME}" -part -hfs -r -l -sysid PPC -V "${RELEASE_NAME}" -chrp-boot -hfs-bless boot/grub/powerpc-ieee1275 -no-desktop -allow-multidot "${BUILD}"/iso ++ [ $? != 0 ] && return 1 + fi + implantisomd5 /result/"${NETINST_ISO_NAME}" + return 0 +-- +2.43.0 + diff --git a/0002-add-config-for-arch-ppc64le.patch b/0002-add-config-for-arch-ppc64le.patch new file mode 100644 index 0000000..3e1d981 --- /dev/null +++ b/0002-add-config-for-arch-ppc64le.patch @@ -0,0 +1,1247 @@ +From 145c0817bfb3cd5527678a69090c567f34d7ac44 Mon Sep 17 00:00:00 2001 +From: "jiahua.yu" +Date: Thu, 28 Mar 2024 15:51:22 +0800 +Subject: [PATCH 2/3] add config for arch ppc64le + +--- + isocut/config/ppc/anaconda-ks.cfg | 372 ++++++++++++++++++ + isocut/config/ppc/rpmlist | 1 + + .../config_files/ppc/bootinfo.txt | 170 ++++++++ + .../config_files/ppc/grub.cfg.in} | 0 + isomaker/80-openeuler/live/ppc64le.tmpl | 96 +++++ + isomaker/80-openeuler/ppc64le.tmpl | 103 +++++ + isomaker/config/ppc/edge_normal.xml | 158 ++++++++ + isomaker/config/ppc/normal.xml | 222 +++++++++++ + isomaker/config/ppc/standard.conf | 6 + + .../live/config_files/ppc64le/grub.cfg.in | 30 ++ + 10 files changed, 1158 insertions(+) + create mode 100644 isocut/config/ppc/anaconda-ks.cfg + create mode 100644 isocut/config/ppc/rpmlist + create mode 100644 isomaker/80-openeuler/config_files/ppc/bootinfo.txt + rename isomaker/{config/ppc64le/livecd/live/config_files/ppc64le/grub.cfg => 80-openeuler/config_files/ppc/grub.cfg.in} (100%) + create mode 100644 isomaker/80-openeuler/live/ppc64le.tmpl + create mode 100644 isomaker/80-openeuler/ppc64le.tmpl + create mode 100644 isomaker/config/ppc/edge_normal.xml + create mode 100644 isomaker/config/ppc/normal.xml + create mode 100644 isomaker/config/ppc/standard.conf + create mode 100644 isomaker/config/ppc64le/livecd/live/config_files/ppc64le/grub.cfg.in + +diff --git a/isocut/config/ppc/anaconda-ks.cfg b/isocut/config/ppc/anaconda-ks.cfg +new file mode 100644 +index 0000000..9bd7cfe +--- /dev/null ++++ b/isocut/config/ppc/anaconda-ks.cfg +@@ -0,0 +1,372 @@ ++#version=DEVEL ++# Use CDROM installation media ++cdrom ++# Use graphical install ++graphical ++# Run the Setup Agent on first boot ++firstboot --enable ++ignoredisk --only-use=sda ++# Keyboard layouts ++keyboard --vckeymap=us --xlayouts='us' ++# System language ++lang en_US.UTF-8 ++ ++# Network information ++network --bootproto=dhcp --device=ens3 --onboot=off --ipv6=auto ++network --hostname=localhost.localdomain ++ ++# Root password ++rootpw --iscrypted $6$xcWWTkm29Zd5V8hv$MrbjVgQ.BCaRXoTGcpq2snPnGx36HUuC7uqH0IEMV3QQXDT6lacPX32Zwdn3yeq4aywymTlaO6anqzZ8tnKFA1 ++# System timezone ++timezone Asia/Beijing --isUtc ++# Reboot after install ++reboot ++# System bootloader configuration ++bootloader --append=" net.ifnames=0 biosdevname=0" --location=mbr --boot-drive=sda ++autopart --type=lvm ++# Partition clearing information ++clearpart --all --initlabel --drives=sda ++ ++%packages --multilib --ignoremissing ++acl.ppc64le ++aide.ppc64le ++audit-libs.ppc64le ++audit.ppc64le ++autogen-libopts.ppc64le ++avahi-libs.ppc64le ++basesystem.noarch ++bash.ppc64le ++bind-libs-lite.ppc64le ++bind-libs.ppc64le ++bind-utils.ppc64le ++blktrace.ppc64le ++bridge-utils.ppc64le ++bzip2-libs.ppc64le ++bzip2.ppc64le ++chkconfig.ppc64le ++cifs-utils.ppc64le ++coreutils.ppc64le ++cpio.ppc64le ++cracklib-dicts.ppc64le ++cracklib.ppc64le ++cronie-anacron.ppc64le ++cronie.ppc64le ++crontabs.noarch ++cryptsetup-libs.ppc64le ++cups-libs.ppc64le ++curl.ppc64le ++cyrus-sasl-lib.ppc64le ++dbus-glib.ppc64le ++dbus-libs.ppc64le ++dbus.ppc64le ++deltarpm.ppc64le ++device-mapper-event-libs.ppc64le ++device-mapper-event.ppc64le ++device-mapper-libs.ppc64le ++device-mapper-persistent-data.ppc64le ++device-mapper.ppc64le ++dhcp-libs.ppc64le ++diffutils.ppc64le ++dmidecode.ppc64le ++dos2unix.ppc64le ++dracut-network.ppc64le ++dracut.ppc64le ++dump_mem_tool.ppc64le ++e2fsprogs-libs.ppc64le ++e2fsprogs.ppc64le ++elfutils-libelf.ppc64le ++elfutils-libs.ppc64le ++ethtool.ppc64le ++openEuler-release.ppc64le ++expat-devel.ppc64le ++expat.ppc64le ++expect.ppc64le ++file-libs.ppc64le ++filesystem.ppc64le ++file.ppc64le ++findutils.ppc64le ++fipscheck-lib.ppc64le ++fipscheck.ppc64le ++freetype.ppc64le ++fuse.ppc64le ++gawk.ppc64le ++gdbm.ppc64le ++genisoimage.ppc64le ++gettext-libs.ppc64le ++gettext.ppc64le ++glib2.ppc64le ++glibc-common.ppc64le ++glibc.ppc64le ++gmp.ppc64le ++gnupg2.ppc64le ++gobject-introspection.ppc64le ++gpgme.ppc64le ++gpm-libs.ppc64le ++grep.ppc64le ++grub2-tools.ppc64le ++grubby.ppc64le ++gssproxy.ppc64le ++gzip.ppc64le ++hardlink.ppc64le ++hdparm.ppc64le ++hostname.ppc64le ++hwdata.noarch ++info.ppc64le ++initscripts.ppc64le ++iotop.noarch ++ipmitool.ppc64le ++iproute.ppc64le ++iptables.ppc64le ++iputils.ppc64le ++irqbalance.ppc64le ++json-c.ppc64le ++kbox-kmod.ppc64le ++kernel-tools-libs.ppc64le ++kernel-tools.ppc64le ++kernel.ppc64le ++kexec-tools.ppc64le ++keyutils-libs.ppc64le ++keyutils.ppc64le ++kmod-libs.ppc64le ++kmod.ppc64le ++kpartx.ppc64le ++kpatch-runtime.noarch ++krb5-libs.ppc64le ++less.ppc64le ++libacl.ppc64le ++libaio.ppc64le ++libalarm.ppc64le ++libassuan.ppc64le ++libattr.ppc64le ++libbasicobjects.ppc64le ++libblkid.ppc64le ++libcap-ng.ppc64le ++libcap.ppc64le ++libcgroup-tools.ppc64le ++libcgroup.ppc64le ++libcollection.ppc64le ++libcom_err.ppc64le ++libcroco.ppc64le ++libcurl.ppc64le ++libdb-utils.ppc64le ++libdb.ppc64le ++libedit.ppc64le ++libestr.ppc64le ++libevent.ppc64le ++libffi.ppc64le ++libgcc.ppc64le ++libgcrypt.ppc64le ++libgomp.ppc64le ++libgpg-error.ppc64le ++libidn.ppc64le ++libini_config.ppc64le ++libldb.ppc64le ++libmnl.ppc64le ++libmount.ppc64le ++libnetfilter_conntrack.ppc64le ++libnfnetlink.ppc64le ++libnfsidmap.ppc64le ++libpath_utils.ppc64le ++libpcap.ppc64le ++libpciaccess.ppc64le ++libpwquality.ppc64le ++libref_array.ppc64le ++libsecurec.ppc64le ++libselinux.ppc64le ++libsemanage.ppc64le ++libsepol.ppc64le ++libssh2.ppc64le ++libss.ppc64le ++libstdc++.ppc64le ++libsysfs.ppc64le ++libtalloc.ppc64le ++libtasn1.ppc64le ++libtdb.ppc64le ++libtevent.ppc64le ++libtirpc.ppc64le ++libunistring.ppc64le ++libusal.ppc64le ++libuser.ppc64le ++libutempter.ppc64le ++libuuid.ppc64le ++libverto.ppc64le ++libwbclient.ppc64le ++libxml2.ppc64le ++libxslt.ppc64le ++linux-firmware.noarch ++lm_sensors-libs.ppc64le ++logrotate.ppc64le ++lsof.ppc64le ++lsscsi.ppc64le ++lua.ppc64le ++lvm2-libs.ppc64le ++lvm2.ppc64le ++lzo.ppc64le ++mailcap.noarch ++mailx.ppc64le ++man-db.ppc64le ++mtools.ppc64le ++ncurses-base.noarch ++ncurses-libs.ppc64le ++ncurses.ppc64le ++net-snmp-libs.ppc64le ++net-tools.ppc64le ++nfs-utils.ppc64le ++nscd.ppc64le ++nspr.ppc64le ++nss-softokn-freebl.ppc64le ++nss-softokn.ppc64le ++nss-sysinit.ppc64le ++nss-tools.ppc64le ++nss-util.ppc64le ++nss.ppc64le ++ntpdate.ppc64le ++numactl-libs.ppc64le ++numactl.ppc64le ++numad.ppc64le ++OpenIPMI-libs.ppc64le ++OpenIPMI.ppc64le ++openldap.ppc64le ++openssh-clients.ppc64le ++openssh-server.ppc64le ++openssh.ppc64le ++openssl-libs.ppc64le ++openssl.ppc64le ++p11-kit-trust.ppc64le ++p11-kit.ppc64le ++pam.ppc64le ++parted.ppc64le ++passwd.ppc64le ++pciutils-libs.ppc64le ++pciutils.ppc64le ++pcre.ppc64le ++perl-Business-ISBN-Data.noarch ++perl-Business-ISBN.noarch ++perl-Carp.noarch ++perl-Compress-Raw-Bzip2.ppc64le ++perl-Compress-Raw-Zlib.ppc64le ++perl-Config-IniFiles.noarch ++perl-constant.noarch ++perl-Data-Dumper.ppc64le ++perl-DBD-SQLite.ppc64le ++perl-DBI.ppc64le ++perl-Digest-MD5.ppc64le ++perl-Digest.noarch ++perl-Digest-SHA.ppc64le ++perl-Encode-Locale.noarch ++perl-Encode.ppc64le ++perl-Exporter.noarch ++perl-File-Listing.noarch ++perl-File-Path.noarch ++perl-File-Temp.noarch ++perl-Filter.ppc64le ++perl-Getopt-Long.noarch ++perl-HTML-Parser.ppc64le ++perl-HTML-Tagset.noarch ++perl-HTTP-Cookies.noarch ++perl-HTTP-Daemon.noarch ++perl-HTTP-Date.noarch ++perl-HTTP-Message.noarch ++perl-HTTP-Negotiate.noarch ++perl-HTTP-Tiny.noarch ++perl-IO-Compress.noarch ++perl-IO-HTML.noarch ++perl-IO-Socket-IP.noarch ++perl-IO-Socket-SSL.noarch ++perl-libs.ppc64le ++perl-libwww-perl.noarch ++perl-List-MoreUtils.noarch ++perl-LWP-MediaTypes.noarch ++perl-macros.ppc64le ++perl-Net-Daemon.noarch ++perl-Net-HTTP.noarch ++perl-Net-LibIDN.ppc64le ++perl-Net-SSLeay.ppc64le ++perl-parent.noarch ++perl-PathTools.ppc64le ++perl-Pod-Escapes.noarch ++perl-podlators.noarch ++perl-Pod-Perldoc.noarch ++perl-Pod-Simple.noarch ++perl-Pod-Usage.noarch ++perl-Scalar-List-Utils.ppc64le ++perl-Socket.ppc64le ++perl-Storable.ppc64le ++perl-Text-ParseWords.noarch ++perl-threads-shared.ppc64le ++perl-threads.ppc64le ++perl-TimeDate.noarch ++perl-Time-HiRes.ppc64le ++perl-Time-Local.noarch ++perl-URI.noarch ++perl-WWW-RobotRules.noarch ++perl.ppc64le ++perl-XML-LibXML.ppc64le ++perl-XML-NamespaceSupport.noarch ++perl-XML-SAX-Base.noarch ++perl-XML-SAX.noarch ++pinentry.ppc64le ++popt.ppc64le ++procps-ng.ppc64le ++psmisc.ppc64le ++qrencode-libs.ppc64le ++quota-nls.noarch ++quota.ppc64le ++rasdaemon.ppc64le ++readline.ppc64le ++rootfiles.noarch ++rpcbind.ppc64le ++rpm-build-libs.ppc64le ++rpm-libs.ppc64le ++rpm.ppc64le ++rsync.ppc64le ++rsyslog.ppc64le ++samba-libs.ppc64le ++screen.ppc64le ++security-tool.ppc64le ++sed.ppc64le ++setup.noarch ++shadow-utils.ppc64le ++smartmontools.ppc64le ++sqlite.ppc64le ++squashfs-tools.ppc64le ++sudo.ppc64le ++sysfsutils.ppc64le ++sysmonitor-kmod.ppc64le ++sysstat.ppc64le ++systemd-libs.ppc64le ++systemd.ppc64le ++tar.ppc64le ++tcp_wrappers-libs.ppc64le ++tcp_wrappers.ppc64le ++teamd.ppc64le ++tuned.noarch ++tzdata.noarch ++unzip.ppc64le ++util-linux.ppc64le ++vim-common.ppc64le ++vim-enhanced.ppc64le ++vim-filesystem.noarch ++vim-minimal.ppc64le ++virt-what.ppc64le ++wget.ppc64le ++which.ppc64le ++xfsprogs.ppc64le ++xz-libs.ppc64le ++xz.ppc64le ++zip.ppc64le ++zlib.ppc64le ++dnf.noarch ++dnf-utils.noarch ++authselect.ppc64le ++authselect-libs.ppc64le ++grub2-efi-aa64.ppc64le ++grub2-efi-aa64-cdboot.ppc64le ++grub2-common.noarch ++grub2-tools.ppc64le ++shim-aa64.ppc64le ++openEuler-logos.noarch ++network-scripts.ppc64le ++NetworkManager.ppc64le ++ ++%end +diff --git a/isocut/config/ppc/rpmlist b/isocut/config/ppc/rpmlist +new file mode 100644 +index 0000000..884e2de +--- /dev/null ++++ b/isocut/config/ppc/rpmlist +@@ -0,0 +1 @@ ++kernel.ppc64le +diff --git a/isomaker/80-openeuler/config_files/ppc/bootinfo.txt b/isomaker/80-openeuler/config_files/ppc/bootinfo.txt +new file mode 100644 +index 0000000..6eac6c4 +--- /dev/null ++++ b/isomaker/80-openeuler/config_files/ppc/bootinfo.txt +@@ -0,0 +1,170 @@ ++ ++grub 2.00 ++grub 2.00 ++boot &device;:\boot\grub\powerpc-ieee1275\core.elf ++ ++ FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF ++FF FF FF FF FF FF FF FF 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ++00 00 00 00 00 00 +diff --git a/isomaker/config/ppc64le/livecd/live/config_files/ppc64le/grub.cfg b/isomaker/80-openeuler/config_files/ppc/grub.cfg.in +similarity index 100% +rename from isomaker/config/ppc64le/livecd/live/config_files/ppc64le/grub.cfg +rename to isomaker/80-openeuler/config_files/ppc/grub.cfg.in +diff --git a/isomaker/80-openeuler/live/ppc64le.tmpl b/isomaker/80-openeuler/live/ppc64le.tmpl +new file mode 100644 +index 0000000..5cd79e0 +--- /dev/null ++++ b/isomaker/80-openeuler/live/ppc64le.tmpl +@@ -0,0 +1,96 @@ ++<%page args="kernels, runtime_img, basearch, libdir, inroot, outroot, product, isolabel, extra_boot_args"/> ++<% ++configdir="tmp/config_files/ppc" ++BOOTDIR="ppc" ++GRUBDIR="boot/grub" ++LIVEDIR="LiveOS" ++LORAXDIR="usr/share/lorax/" ++ ++## NOTE: yaboot freaks out and stops parsing its config if it sees a '\', ++## so we can't use the udev escape sequences in the root arg. ++## Instead we'll just replace any non-ASCII characters in the isolabel ++## with '_', which means we won't need any udev escapes. ++isolabel = ''.join(ch if ch.isalnum() else '_' for ch in isolabel) ++ ++import os ++from os.path import basename ++from pylorax.sysutils import joinpaths ++ ++# Test the runtime_img, if it is > 4GiB we need to set -iso-level to 3 ++if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3: ++ isoargs = "-iso-level 3" ++else: ++ isoargs = "" ++%> ++ ++mkdir ${LIVEDIR} ++install ${runtime_img} ${LIVEDIR}/squashfs.img ++treeinfo stage2 mainimage ${LIVEDIR}/squashfs.img ++ ++## install the bootloaders ++## ppc/chrp: for normal PPC systems. ++## uses /ppc/bootinfo.txt in the iso root ++## uses /boot/grub/grub.cfg in the iso root ++mkdir ${BOOTDIR} ++## boot stuff for normal (CHRP/PREP) PPC systems ++install ${configdir}/bootinfo.txt ${BOOTDIR} ++ ++mkdir ${GRUBDIR}/powerpc-ieee1275 ++## "()" means the current device to grub2 ++runcmd grub2-mkimage --format=powerpc-ieee1275 --directory=/usr/lib/grub/powerpc-ieee1275 --prefix="()/"${GRUBDIR} \ ++--output=${outroot}/${GRUBDIR}/powerpc-ieee1275/core.elf iso9660 ext2 ofnet net tftp http ++install /usr/lib/grub/powerpc-ieee1275/*.mod ${GRUBDIR}/powerpc-ieee1275 ++install /usr/lib/grub/powerpc-ieee1275/*.lst ${GRUBDIR}/powerpc-ieee1275 ++ ++install ${configdir}/grub.cfg.in ${GRUBDIR}/grub.cfg ++replace @PRODUCT@ '${product.name}' ${GRUBDIR}/grub.cfg ++replace @VERSION@ ${product.version} ${GRUBDIR}/grub.cfg ++replace @ROOT@ 'root=live:CDLABEL=${isolabel|udev}' ${GRUBDIR}/grub.cfg ++replace @EXTRA@ '${extra_boot_args}' ${GRUBDIR}/grub.cfg ++ ++## Install kernel and bootloader config (in separate places for each arch) ++%for kernel in kernels: ++ <% ++ bits = 64 ++ ## separate dirs/images for each arch ++ KERNELDIR=BOOTDIR+"/ppc%s" % bits ++ %> ++ ## install kernel ++ mkdir ${KERNELDIR} ++ installkernel images-${kernel.arch} ${kernel.path} ${KERNELDIR}/vmlinuz ++ installinitrd images-${kernel.arch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img ++ ++ treeinfo images-${kernel.arch} zimage ++%endfor ++ ++# Create optional product.img and updates.img ++<% filegraft=""; images=["product", "updates"] %> ++%for img in images: ++ %if exists("%s/%s/" % (LORAXDIR, img)): ++ installimg ${LORAXDIR}/${img}/ images/${img}.img ++ treeinfo images-${basearch} ${img}.img images/${img}.img ++ <% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> ++ %endif ++%endfor ++ ++# Add the license files ++%for f in glob("/usr/share/licenses/*-release/*"): ++ install ${f} ${f|basename} ++ <% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %> ++%endfor ++ ++## make boot.iso ++runcmd xorrisofs -v -U -J -R ${isoargs} \ ++ -o ${outroot}/images/boot.iso \ ++ -r -l -sysid PPC \ ++ -A "${product.name} ${product.version}" -V '${isolabel}' \ ++ -volset "${product.version}" -volset-size 1 -volset-seqno 1 \ ++ -chrp-boot \ ++ -graft-points \ ++ ${BOOTDIR}=${outroot}/${BOOTDIR} \ ++ ${GRUBDIR}=${outroot}/${GRUBDIR} \ ++ ${LIVEDIR}=${outroot}/${LIVEDIR} ${filegraft} ++ ++%for kernel in kernels: ++ treeinfo images-${kernel.arch} boot.iso images/boot.iso ++%endfor +diff --git a/isomaker/80-openeuler/ppc64le.tmpl b/isomaker/80-openeuler/ppc64le.tmpl +new file mode 100644 +index 0000000..dc03c09 +--- /dev/null ++++ b/isomaker/80-openeuler/ppc64le.tmpl +@@ -0,0 +1,103 @@ ++<%page args="kernels, runtime_img, basearch, libdir, inroot, outroot, product, isolabel"/> ++<% ++configdir="tmp/config_files/ppc" ++BOOTDIR="ppc" ++GRUBDIR="boot/grub" ++STAGE2IMG="images/install.img" ++LORAXDIR="usr/share/lorax/" ++ ++## Don't allow spaces or escape characters in the iso label ++def valid_label(ch): ++ return ch.isalnum() or ch == '_' ++ ++isolabel = ''.join(ch if valid_label(ch) else '-' for ch in isolabel) ++ ++import os ++from os.path import basename ++from pylorax.sysutils import joinpaths ++ ++# Test the runtime_img, if it is > 4GiB we need to set -iso-level to 3 ++if os.stat(joinpaths(inroot, runtime_img)).st_size >= 4*1024**3: ++ isoargs = "-iso-level 3" ++else: ++ isoargs = "" ++%> ++ ++mkdir images ++install ${runtime_img} ${STAGE2IMG} ++treeinfo stage2 mainimage ${STAGE2IMG} ++ ++## install the bootloaders ++## ppc/chrp: for normal PPC systems. ++## uses /ppc/bootinfo.txt in the iso root ++## uses /boot/grub/grub.cfg in the iso root ++mkdir ${BOOTDIR} ++## boot stuff for normal (CHRP/PREP) PPC systems ++install ${configdir}/bootinfo.txt ${BOOTDIR} ++ ++mkdir ${GRUBDIR}/powerpc-ieee1275 ++## "()" means the current device to grub2 ++runcmd grub2-mkimage --format=powerpc-ieee1275 --directory=/usr/lib/grub/powerpc-ieee1275 --prefix="()/"${GRUBDIR} \ ++--output=${outroot}/${GRUBDIR}/powerpc-ieee1275/core.elf iso9660 ext2 ofnet net tftp http ++install /usr/lib/grub/powerpc-ieee1275/*.mod ${GRUBDIR}/powerpc-ieee1275 ++install /usr/lib/grub/powerpc-ieee1275/*.lst ${GRUBDIR}/powerpc-ieee1275 ++ ++install ${configdir}/grub.cfg.in ${GRUBDIR}/grub.cfg ++replace @PRODUCT@ '${product.name}' ${GRUBDIR}/grub.cfg ++replace @VERSION@ ${product.version} ${GRUBDIR}/grub.cfg ++replace @ROOT@ 'inst.stage2=hd:LABEL=${isolabel|udev}' ${GRUBDIR}/grub.cfg ++ ++## Install kernel and bootloader config (in separate places for each arch) ++%for kernel in kernels: ++ <% ++ bits = 64 ++ ## separate dirs/images for each arch ++ KERNELDIR=BOOTDIR+"/ppc%s" % bits ++ %> ++ ## install kernel ++ mkdir ${KERNELDIR} ++ installkernel images-${kernel.arch} ${kernel.path} ${KERNELDIR}/vmlinuz ++ installinitrd images-${kernel.arch} ${kernel.initrd.path} ${KERNELDIR}/initrd.img ++ ++ treeinfo images-${kernel.arch} zimage ++%endfor ++ ++# Create optional product.img and updates.img ++<% filegraft=""; images=["product", "updates"] %> ++%for img in images: ++ %if exists("%s/%s/" % (LORAXDIR, img)): ++ installimg ${LORAXDIR}/${img}/ images/${img}.img ++ treeinfo images-${basearch} ${img}.img images/${img}.img ++ <% filegraft += " images/{0}.img={1}/images/{0}.img".format(img, outroot) %> ++ %endif ++%endfor ++ ++# Inherit iso-graft/ if it exists from external templates ++<% ++ import os ++ if os.path.exists(workdir + "/iso-graft"): ++ filegraft += " " + workdir + "/iso-graft" ++%> ++ ++# Add the license files ++%for f in glob("/usr/share/licenses/*-release/*"): ++ install ${f} ${f|basename} ++ <% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %> ++%endfor ++ ++## make boot.iso ++runcmd xorrisofs -v -U -J -R ${isoargs} \ ++ -o ${outroot}/images/boot.iso \ ++ -r -l -sysid PPC \ ++ -A "${product.name} ${product.version}" -V '${isolabel}' \ ++ -volset "${product.version}" -volset-size 1 -volset-seqno 1 \ ++ -chrp-boot \ ++ -graft-points \ ++ .discinfo=${outroot}/.discinfo \ ++ ${BOOTDIR}=${outroot}/${BOOTDIR} \ ++ ${GRUBDIR}=${outroot}/${GRUBDIR} \ ++ ${STAGE2IMG}=${outroot}/${STAGE2IMG} ${filegraft} ++ ++%for kernel in kernels: ++ treeinfo images-${kernel.arch} boot.iso images/boot.iso ++%endfor +diff --git a/isomaker/config/ppc/edge_normal.xml b/isomaker/config/ppc/edge_normal.xml +new file mode 100644 +index 0000000..8ce22fc +--- /dev/null ++++ b/isomaker/config/ppc/edge_normal.xml +@@ -0,0 +1,158 @@ ++ ++ ++ ++ ++ core ++ Core ++ 核心 ++ Smallest possible installation ++ 最小安装 ++ true ++ false ++ ++ audit ++ kernel ++ basesystem ++ bash ++ coreutils ++ cronie ++ curl ++ dnf ++ e2fsprogs ++ filesystem ++ firewalld ++ glibc ++ grubby ++ hostname ++ initscripts ++ iproute ++ iprutils ++ iputils ++ irqbalance ++ kbd ++ kexec-tools ++ less ++ man-db ++ ncurses ++ openssh ++ openssh-server ++ openssh-clients ++ parted ++ passwd ++ policycoreutils ++ procps-ng ++ rng-tools ++ rootfiles ++ rpm ++ selinux-policy-targeted ++ setup ++ shadow ++ sssd ++ sudo ++ systemd ++ tuned ++ util-linux ++ vim-minimal ++ xfsprogs ++ yum ++ wget ++ openEuler-release ++ openEuler-performance ++ openEuler-latest-release ++ NetworkManager ++ NetworkManager-config-server ++ authselect ++ dnf-plugins-core ++ dracut-config-rescue ++ kernel-tools ++ sysfsutils ++ linux-firmware ++ lshw ++ lsscsi ++ rsyslog ++ security-tool ++ sg3_utils ++ dracut-config-generic ++ dracut-network ++ rdma-core ++ selinux-policy-mls ++ patch ++ patch-help ++ ntp ++ ntp-help ++ ntp-perl ++ iSulad ++ tar ++ socat ++ socat-help ++ conntrack-tools ++ conntrack-tools-help ++ vim-X11 ++ vim-common ++ vim-enhanced ++ vim-filesystem ++ vim-minimal ++ efibootmgr ++ efibootmgr-help ++ cjson ++ cjson-devel ++ mosquitto ++ chrony ++ ++ ++ ++ edge ++ Edge ++ 边缘场景 ++ Package for edge scene ++ 边缘场景相关包 ++ true ++ false ++ ++ kubernetes ++ kubernetes-client ++ kubernetes-help ++ kubernetes-kubeadm ++ kubernetes-kubelet ++ kubernetes-master ++ kubernetes-node ++ kubeedge-cloudcore ++ kubeedge-edgecore ++ kubeedge-edgesite ++ kubeedge-keadm ++ mdadm ++ mdadm-help ++ ++ ++ ++ minimal-environment ++ Minimal Install ++ 最小安装 ++ Basic functionality. ++ 基本功能。 ++ 1 ++ ++ core ++ ++ ++ standard ++ ++ ++ ++ edge-cloud-environment ++ Edge Cloud ++ 边缘云 ++ For edge computing scenarios ++ 用于边缘计算场景 ++ 2 ++ ++ core ++ edge ++ ++ ++ standard ++ ++ ++ +diff --git a/isomaker/config/ppc/normal.xml b/isomaker/config/ppc/normal.xml +new file mode 100644 +index 0000000..2ccad86 +--- /dev/null ++++ b/isomaker/config/ppc/normal.xml +@@ -0,0 +1,222 @@ ++ ++ ++ ++ ++ core ++ Core ++ 核心 ++ Smallest possible installation ++ 最小安装 ++ true ++ false ++ ++ audit ++ kernel ++ basesystem ++ bash ++ coreutils ++ cronie ++ curl ++ dnf ++ e2fsprogs ++ filesystem ++ glibc ++ grubby ++ hostname ++ initscripts ++ iproute ++ kbd ++ less ++ man-db ++ ncurses ++ openssh ++ openssh-server ++ openssh-clients ++ passwd ++ procps-ng ++ rootfiles ++ rpm ++ setup ++ shadow ++ sudo ++ systemd ++ util-linux ++ vim-minimal ++ yum ++ openEuler-latest-release ++ NetworkManager ++ NetworkManager-config-server ++ authselect ++ dracut-config-rescue ++ sysfsutils ++ linux-firmware ++ rsyslog ++ dracut-config-generic ++ dracut-network ++ ++ ++ ++ large-systems ++ Large Systems Performance ++ 大系统性能 ++ Performance support tools for large systems. ++ 用于大型系统的性能支持工具。 ++ true ++ false ++ ++ numactl ++ ++ ++ ++ legacy-x ++ Legacy X Window System Compatibility ++ 传统 X Windows 系统的兼容性 ++ Compatibility programs for migration from or working with legacy X Window System environments. ++ 用于从继承 X Windows 环境中迁移或者可用于该环境的兼容程序。 ++ true ++ false ++ ++ libXmu ++ ++ ++ ++ mail-server ++ Mail Server ++ 邮件服务器 ++ These packages allow you to configure an IMAP or SMTP mail server. ++ 这些软件包允许您配置 IMAP 或 Postfix 邮件服务器。 ++ true ++ false ++ ++ cyrus-sasl ++ ++ ++ ++ network-server ++ Network Servers ++ 网络服务器 ++ These packages include network-based servers such as DHCP, Kerberos and NIS. ++ 这些软件包包括基于网络的服务器,例如 DHCP、Kerberos 和 NIS。 ++ true ++ true ++ ++ krb5-server ++ rsyslog ++ rsyslog-mysql ++ rsyslog-pgsql ++ rsyslog-relp ++ ++ ++ ++ network-tools ++ Networking Tools ++ 联网工具 ++ Tools for configuring and analyzing computer networks. ++ 配置和分析计算机网络的工具。 ++ true ++ false ++ ++ rsyslog ++ rsyslog-mysql ++ rsyslog-pgsql ++ rsyslog-relp ++ ++ ++ ++ networkmanager-submodules ++ Common NetworkManager submodules ++ This group contains NetworkManager submodules that are commonly used, but may not be wanted in some streamlined configurations. ++ true ++ false ++ ++ NetworkManager-bluetooth ++ NetworkManager-wifi ++ NetworkManager-wwan ++ iptables ++ ++ ++ ++ standard ++ Standard ++ 标准 ++ The standard installation. ++ 标准安装。 ++ true ++ false ++ ++ acl ++ attr ++ bc ++ cpio ++ cyrus-sasl ++ crontabs ++ file ++ logrotate ++ lsof ++ net-tools ++ pciutils ++ quota ++ openEuler-release ++ sudo ++ systemd-udev ++ tar ++ util-linux-user ++ bpftool ++ bzip2 ++ chrony ++ cryptsetup ++ dosfstools ++ ethtool ++ gnupg2 ++ lvm2 ++ mdadm ++ mtr ++ realmd ++ rsync ++ smartmontools ++ strace ++ libteam ++ unzip ++ usbutils ++ which ++ xfsdump ++ zip ++ ima-evm-utils ++ nfs-utils ++ rng-tools ++ rsyslog-gnutls ++ rsyslog ++ rsyslog-relp ++ nmap ++ plymouth ++ vim-enhanced ++ wget ++ ++ ++ ++ minimal-environment ++ Minimal Install ++ 最小安装 ++ Basic functionality. ++ 基本功能。 ++ 1 ++ ++ core ++ ++ ++ standard ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git a/isomaker/config/ppc/standard.conf b/isomaker/config/ppc/standard.conf +new file mode 100644 +index 0000000..fa13e32 +--- /dev/null ++++ b/isomaker/config/ppc/standard.conf +@@ -0,0 +1,6 @@ ++CONFIG_YUM_REPOS="http://repo.openeuler.org/openEuler-22.03-LTS/everything/ppc64le/" ++CONFIG_PACKAGES_LIST_FILE="config/ppc64le/normal.xml" ++CONFIG_RPM_LIST="config/rpmlist.xml" ++CONFIG_PRODUCT="openEuler" ++CONFIG_VERSION="22.03" ++CONFIG_RELEASE="LTS" +diff --git a/isomaker/config/ppc64le/livecd/live/config_files/ppc64le/grub.cfg.in b/isomaker/config/ppc64le/livecd/live/config_files/ppc64le/grub.cfg.in +new file mode 100644 +index 0000000..417856e +--- /dev/null ++++ b/isomaker/config/ppc64le/livecd/live/config_files/ppc64le/grub.cfg.in +@@ -0,0 +1,30 @@ ++set default=0 ++set timeout=5 ++ ++echo -e "\nWelcome to the @PRODUCT@ @VERSION@ installer!\n\n" ++ ++menuentry "Install @PRODUCT@ @VERSION@ (64-bit kernel)" --class fedora --class gnu-linux --class gnu --class os { ++ linux /ppc/ppc64/vmlinuz @ROOT@ ro ++ initrd /ppc/ppc64/initrd.img ++} ++ ++menuentry "Test this media & install @PRODUCT@ @VERSION@ (64-bit kernel)" --class fedora --class gnu-linux --class gnu --class os { ++ linux /ppc/ppc64/vmlinuz @ROOT@ rd.live.check ro ++ initrd /ppc/ppc64/initrd.img ++} ++ ++menuentry "Rescue a @PRODUCT@ system (64-bit kernel)" --class fedora --class gnu-linux --class gnu --class os { ++ linux /ppc/ppc64/vmlinuz @ROOT@ rescue ro ++ initrd /ppc/ppc64/initrd.img ++} ++ ++submenu 'Other options...' { ++ menuentry 'Reboot' { ++ reboot ++ } ++ ++ menuentry 'Exit to Open Firmware' { ++ exit ++ } ++} ++ +-- +2.43.0 + diff --git a/0003-add-support-for-ppc64le-runtime-install.patch b/0003-add-support-for-ppc64le-runtime-install.patch new file mode 100644 index 0000000..f536e57 --- /dev/null +++ b/0003-add-support-for-ppc64le-runtime-install.patch @@ -0,0 +1,43 @@ +From 7f780bfae1b2e6283f03357865fef0618d28beac Mon Sep 17 00:00:00 2001 +From: jiahua_yu +Date: Tue, 25 Jun 2024 11:42:08 +0800 +Subject: [PATCH 3/3] add-support-for-ppc64le-runtime-install + +--- + isomaker/80-openeuler/runtime-cleanup.tmpl | 2 ++ + isomaker/80-openeuler/runtime-install.tmpl | 5 +++++ + 2 files changed, 7 insertions(+) + +diff --git a/isomaker/80-openeuler/runtime-cleanup.tmpl b/isomaker/80-openeuler/runtime-cleanup.tmpl +index 256d013..3bcfc22 100644 +--- a/isomaker/80-openeuler/runtime-cleanup.tmpl ++++ b/isomaker/80-openeuler/runtime-cleanup.tmpl +@@ -254,7 +254,9 @@ removefrom ncurses /usr/bin/captoinfo /usr/bin/infocmp /usr/bin/infotocap + removefrom ncurses /usr/bin/reset /usr/bin/tabs /usr/bin/tic /usr/bin/toe + removefrom ncurses /usr/bin/tput /usr/bin/tset + removefrom ncurses-libs /usr/${libdir}/libform* ++%if basearch != 'ppc64le': + removefrom ncurses-libs /usr/${libdir}/libmenu* ++%endif + removefrom ncurses-libs /usr/${libdir}/libpanel.* /usr/${libdir}/libtic* + removefrom net-tools */bin/netstat */sbin/ether-wake */sbin/ipmaddr + removefrom net-tools */sbin/iptunnel */sbin/mii-diag */sbin/mii-tool +diff --git a/isomaker/80-openeuler/runtime-install.tmpl b/isomaker/80-openeuler/runtime-install.tmpl +index 9937e70..6e400e7 100644 +--- a/isomaker/80-openeuler/runtime-install.tmpl ++++ b/isomaker/80-openeuler/runtime-install.tmpl +@@ -52,6 +52,11 @@ installpkg glibc-all-langpacks + installpkg grub2-efi-loongarch64 grub2-efi-loongarch64-cdboot grub2-efi-loongarch64-modules + installpkg grub2-tools grub2-tools-minimal grub2-tools-extra + %endif ++%if basearch in ("ppc64le"): ++ installpkg powerpc-utils lsvpd ppc64-diag ++ installpkg grub2-tools grub2-tools-minimal grub2-tools-extra ++ installpkg grub2-ppc64le ++%endif + + ## yay, plymouth + installpkg plymouth +-- +2.43.0 + diff --git a/edge_normal_ppc64le.xml b/edge_normal_ppc64le.xml new file mode 100644 index 0000000..9693f17 --- /dev/null +++ b/edge_normal_ppc64le.xml @@ -0,0 +1,157 @@ + + + + + core + Core + 核心 + Smallest possible installation + 最小安装 + true + false + + audit + kernel + basesystem + bash + coreutils + cronie + curl + dnf + e2fsprogs + filesystem + firewalld + glibc + grubby + hostname + initscripts + iproute + iprutils + iputils + irqbalance + kbd + kexec-tools + less + man-db + ncurses + openssh + openssh-server + openssh-clients + openEuler-release + openEuler-latest-release + parted + passwd + policycoreutils + procps-ng + rng-tools + rootfiles + rpm + selinux-policy-targeted + setup + shadow + sssd + sudo + systemd + tuned + util-linux + vim-minimal + xfsprogs + yum + wget + NetworkManager + NetworkManager-config-server + authselect + dnf-plugins-core + dracut-config-rescue + kernel-tools + sysfsutils + linux-firmware + lshw + lsscsi + rsyslog + security-tool + sg3_utils + dracut-config-generic + dracut-network + rdma-core + selinux-policy-mls + patch + patch-help + ntp + ntp-help + ntp-perl + iSulad + tar + socat + socat-help + conntrack-tools + conntrack-tools-help + vim-X11 + vim-common + vim-enhanced + vim-filesystem + vim-minimal + efibootmgr + efibootmgr-help + cjson + cjson-devel + mosquitto + chrony + + + + edge + Edge + 边缘场景 + Package for edge scene + 边缘场景相关包 + true + false + + kubernetes + kubernetes-client + kubernetes-help + kubernetes-kubeadm + kubernetes-kubelet + kubernetes-master + kubernetes-node + kubeedge-cloudcore + kubeedge-edgecore + kubeedge-edgesite + kubeedge-keadm + mdadm + mdadm-help + + + + minimal-environment + Minimal Install + 最小安装 + Basic functionality. + 基本功能。 + 1 + + core + + + standard + + + + edge-cloud-environment + Edge Cloud + 边缘云 + For edge computing scenarios + 用于边缘计算场景 + 2 + + core + edge + + + standard + + + diff --git a/normal_ppc64le.xml b/normal_ppc64le.xml new file mode 100644 index 0000000..e842e2d --- /dev/null +++ b/normal_ppc64le.xml @@ -0,0 +1,1534 @@ + + + + + additional-devel + Additional Development + 附加开发 + Additional development headers and libraries for building open-source applications. + 用于构建开源应用程序的附加开发标头及程序可。 + true + false + + audit-libs-devel + bzip2-devel + c-ares-devel + cyrus-sasl-devel + e2fsprogs-devel + elfutils-devel + elfutils-libelf-devel + expat-devel + fuse3-devel + gmp-devel + lksctp-tools-devel + iptables-devel + libacl-devel + libaio-devel + libattr-devel + libblkid-devel + libcap-devel + libcap-ng-devel + libcurl-devel + libffi-devel + libgcrypt-devel + libnl3-devel + libselinux-devel + libusbx-devel + libuuid-devel + lksctp-tools-devel + lz4 + lz4-devel + lzo + lzo-devel + numactl-devel + pciutils-devel + pcre-devel + polkit-devel + popt-devel + rdma-core-devel + readline-devel + sqlite-devel + systemd-devel + tcl-devel + xfsprogs-devel + xz-devel + SDL-devel + alsa-lib-devel + binutils-devel + boost-devel + dbus-glib-devel + gd-devel + gnutls-devel + gpm-devel + gstreamer1-devel + gstreamer1-plugins-base-devel + hunspell-devel + java-1.8.0-openjdk-devel + libXau-devel + libXaw-devel + libXinerama-devel + libXmu-devel + libXrandr-devel + libcanberra-devel + libdrm-devel + libnotify-devel + libpfm-devel + libpq-devel + librsvg2-devel + libsoup-devel + libssh-devel + libtiff-devel + libxslt-devel + mariadb-devel + mpfr-devel + net-snmp-devel + newt-devel + openscap-devel + papi-devel + protobuf-c + sane-backends-devel + slang-devel + startup-notification-devel + tbb-devel + tk-devel + unixODBC-devel + xorg-x11-proto-devel + flatpak + + + + anaconda-tools + Anaconda tools + Anaconda 工具 + + false + false + + lorax + chrony + cryptsetup + device-mapper-multipath + dosfstools + dracut-network + e2fsprogs + fcoe-utils + firewalld + gfs2-utils + glibc-all-langpacks + grub2-tools + grub2-tools-extra + iscsi-initiator-utils + lvm2 + mdadm + realmd + libteam + tmux + xfsprogs + authselect-compat + kdump-anaconda-addon + + + + base + Base + 基本 + The standard installation. + true + false + + acl + at + attr + bc + cpio + crontabs + cyrus-sasl + dbus + ed + file + iptstate + irqbalance + kpatch + logrotate + lsof + net-tools + pciutils + psacct + quota + openEuler-release + openEuler-latest-release + sudo + symlinks + systemd-udev + tar + tree + util-linux-user + bash-completion + bpftool + bzip2 + chrony + cockpit + cryptsetup + dos2unix + dosfstools + ethtool + gnupg2 + libstoragemgmt + lvm2 + mailcap + man-pages + mdadm + mlocate + mtr + nano + realmd + rng-tools + rsync + smartmontools + sssd + strace + libteam + time + unzip + usbutils + virt-what + which + words + xfsdump + zip + cifs-utils + cockpit-doc + ima-evm-utils + nfs-utils + traceroute + zsh + + + + conflicts-baseos + Conflicts BaseOS + 与 BaseOS 冲突 + This group includes packages conflicting with an everything installation from the BaseOS repo + 这个组包括了与通过 BaseOS repo 安装的软件冲突的软件包 + false + false + + + + + container-management + Container Management + 容器管理 + Tools for managing Linux containers + 用于管理 Linux 容器的工具 + true + true + + containernetworking-plugins + + + + core + Core + 核心 + Smallest possible installation + 最小安装 + true + false + + audit + kernel + basesystem + bash + coreutils + cronie + curl + dnf + e2fsprogs + filesystem + firewalld + glibc + grubby + hostname + initscripts + iproute + iprutils + iputils + irqbalance + kbd + kexec-tools + less + man-db + ncurses + openssh + openssh-server + openssh-clients + openEuler-release + openEuler-latest-release + parted + passwd + policycoreutils + procps-ng + rng-tools + rootfiles + rpm + selinux-policy-targeted + setup + shadow + sssd + sudo + systemd + tuned + util-linux + vim-minimal + xfsprogs + yum + wget + NetworkManager + NetworkManager-config-server + authselect + dnf-plugins-core + dracut-config-rescue + kernel-tools + sysfsutils + linux-firmware + lshw + lsscsi + rsyslog + security-tool + sg3_utils + dracut-config-generic + dracut-network + rdma-core + selinux-policy-mls + + + + desktop-debugging + Desktop Debugging and Performance Tools + 桌面调试和运行工具 + GUI tools for debugging applications and performance. + 调试应用程序和性能的 GUI 工具。 + true + false + + crash + crash-gcore-command + crash-trace-command + xrestop + + + + development + Development Tools + 开发工具 + A basic development environment. + 基本开发环境。 + true + true + + autoconf + automake + binutils + bison + flex + gcc + gcc-c++ + glibc-devel + gettext + gdb + libtool + make + patch + pkgconf + openEuler-rpm-config + rpm-build + rpm + asciidoc + byacc + ctags + diffstat + elfutils + gcc-gfortran + git + subversion + intltool + ltrace + patchutils + perl-Fedora-VSP + perl-generators + source-highlight + systemtap + valgrind + valgrind-devel + babel + chrpath + expect + gcc-objc + gcc-objc++ + mercurial + mod_dav_svn + systemtap-sdt-devel + systemtap-server + cmake + rpmdevtools + rpmlint + + + + dial-up + Dial-up Networking Support + 拨号网络支持 + + true + false + + ppp + ModemManager + NetworkManager-adsl + lrzsz + minicom + + + + dns-server + DNS Name Server + DNS 名称服务器 + This package group allows you to run a DNS name server (BIND) on the system. + 该软件包组允许您在系统上运行 DNS 名称服务器(BIND)。 + false + false + + bind + bind-chroot + bind-dyndb-ldap + unbound + + + + directory-client + Directory Client + 目录客户端 + Clients for integration into a network managed by a directory service. + 用于整合到使用目录服务管理的网络的客户端。 + false + false + + adcli + oddjob-mkhomedir + realmd + sssd + clevis-dracut + clevis-udisks2 + krb5-pkinit + krb5-workstation + luksmeta + nss-pam-ldapd + openldap-clients + samba-winbind + samba-winbind-clients + sssd-dbus + sssd-tools + sssd-winbind-idmap + + + + file-server + File and Storage Server + 文件及存储服务器 + CIFS, SMB, NFS, iSCSI, iSER, and iSNS network storage server. + CIFS, SMB, NFS, iSCSI, iSER 及 iSNS 网络存储服务器。 + true + false + + cifs-utils + gssproxy + nfs-utils + nfs4-acl-tools + samba + open-isns + + + + fonts + Fonts + 字体 + Fonts packages for rendering text on the desktop. + 用于在桌面显示文字的字体软件包。 + true + false + + dejavu-sans-fonts + dejavu-sans-mono-fonts + dejavu-serif-fonts + abattis-cantarell-fonts + gnu-free-mono-fonts + gnu-free-sans-fonts + gnu-free-serif-fonts + google-noto-sans-cjk-ttc-fonts + google-noto-serif-cjk-ttc-fonts + jomolhari-fonts + julietaula-montserrat-fonts + paktype-naskh-basic-fonts + paratype-pt-sans-fonts + sil-abyssinica-fonts + sil-nuosu-fonts + sil-padauk-fonts + smc-meera-fonts + stix-fonts + thai-scalable-waree-fonts + bpg-algeti-fonts + bpg-chveulebrivi-fonts + bpg-courier-fonts + bpg-courier-s-fonts + bpg-elite-fonts + bpg-excelsior-fonts + bpg-glaho-fonts + bpg-ingiri-fonts + bpg-nino-medium-cond-fonts + bpg-nino-medium-fonts + bpg-sans-fonts + bpg-sans-medium-fonts + bpg-sans-modern-fonts + bpg-sans-regular-fonts + bpg-serif-fonts + bpg-serif-modern-fonts + fontawesome-fonts + google-droid-kufi-fonts + google-droid-sans-fonts + google-droid-sans-mono-fonts + google-droid-serif-fonts + gubbi-fonts + kacst-art-fonts + kacst-book-fonts + kacst-decorative-fonts + kacst-digital-fonts + kacst-farsi-fonts + kacst-letter-fonts + kacst-naskh-fonts + kacst-office-fonts + kacst-one-fonts + kacst-pen-fonts + kacst-poster-fonts + kacst-qurn-fonts + kacst-screen-fonts + kacst-title-fonts + kacst-titlel-fonts + kurdit-unikurd-web-fonts + lato-fonts + madan-fonts + nafees-web-naskh-fonts + navilu-fonts + overpass-fonts + paktype-naqsh-fonts + paktype-tehreer-fonts + saab-fonts + samyak-devanagari-fonts + samyak-gujarati-fonts + samyak-malayalam-fonts + samyak-odia-fonts + samyak-tamil-fonts + sil-scheherazade-fonts + smc-anjalioldlipi-fonts + smc-dyuthi-fonts + smc-kalyani-fonts + smc-rachana-fonts + smc-raghumalayalam-fonts + smc-suruma-fonts + stix-math-fonts + thai-scalable-garuda-fonts + thai-scalable-kinnari-fonts + thai-scalable-loma-fonts + thai-scalable-norasi-fonts + thai-scalable-purisa-fonts + thai-scalable-sawasdee-fonts + thai-scalable-tlwgmono-fonts + thai-scalable-tlwgtypewriter-fonts + thai-scalable-tlwgtypist-fonts + thai-scalable-tlwgtypo-fonts + thai-scalable-umpush-fonts + tibetan-machine-uni-fonts + wqy-microhei-fonts + xorg-x11-fonts-100dpi + xorg-x11-fonts-75dpi + xorg-x11-fonts-ISO8859-1-100dpi + xorg-x11-fonts-ISO8859-1-75dpi + xorg-x11-fonts-ISO8859-14-100dpi + xorg-x11-fonts-ISO8859-14-75dpi + xorg-x11-fonts-ISO8859-15-100dpi + xorg-x11-fonts-ISO8859-15-75dpi + xorg-x11-fonts-ISO8859-2-100dpi + xorg-x11-fonts-ISO8859-2-75dpi + xorg-x11-fonts-ISO8859-9-100dpi + xorg-x11-fonts-ISO8859-9-75dpi + xorg-x11-fonts-Type1 + xorg-x11-fonts-cyrillic + xorg-x11-fonts-misc + + + + ftp-server + FTP Server + FTP 服务器 + These tools allow you to run an FTP server on the system. + 这些工具允许您在系统上运行 FTP 服务器。 + true + false + + vsftpd + + + + gnome-apps + GNOME Applications + GNOME 应用程序 + A set of commonly used GNOME Applications. + 一组经常使用的 GNOME 应用程序。 + false + false + + + + + guest-desktop-agents + Guest Desktop Agents + 虚拟机桌面代理 + Agents used when running as a virtualized desktop. + 作为虚拟桌面运行时使用的代理。 + true + false + + qemu-guest-agent + spice-vdagent + + + + hardware-monitoring + Hardware Monitoring Utilities + 硬件监控工具 + A set of tools to monitor server hardware. + 一组用来监控服务器硬件的工具。 + true + false + + rasdaemon + smartmontools + lm_sensors + + + + hardware-support + Hardware Support + This group is a collection of tools for various hardware specific utilities. + true + false + + bolt + usb_modeswitch + linux-firmware + lsscsi + opensc + openssl-pkcs11 + pcsc-lite + pcsc-lite-ccid + + + + headless-management + Headless Management + 无图形终端系统管理工具 + Tools for managing the system without an attached graphical console. + 用于管理无图像终端系统的工具。 + true + true + + PackageKit + cockpit + cockpit + openssh-server + sscg + + + + infiniband + Infiniband Support + Infiniband 支持 + Software designed for supporting clustering, grid connectivity, and low-latency, high bandwidth storage using RDMA-based InfiniBand, iWARP, RoCE, and OPA fabrics. + true + false + + libibverbs + libibverbs-utils + librdmacm + librdmacm-utils + rdma-core + ibacm + iwpmd + perftest + srp_daemon + opensm + + + + input-methods + Input Methods + 输入法 + Input method packages for the input of international text. + 输入非英文文本的输入法软件包 + true + false + + ibus-m17n + ibus-sayura + ibus-table + ibus-table-array30 + gtk2-immodule-xim + gtk3-immodule-xim + ibus-gtk2 + ibus-gtk3 + + + + internet-applications + Internet Applications + 互联网应用程序 + Email, chat, and video conferencing software. + 电子邮件、聊天和视频会议软件。 + false + false + + + + + java-platform + Java Platform + Java 平台 + Java support for the Red Hat Enterprise Linux Server and Desktop Platforms. + Red Hat Enterprise Linux 服务器和桌面平台的 Java 支持。 + true + false + + java-1.8.0-openjdk + + + + large-systems + Large Systems Performance + 大系统性能 + Performance support tools for large systems. + 用于大型系统的性能支持工具。 + true + false + + numactl + numad + hwloc + mstflint + qperf + libvma + + + + legacy-unix + Legacy UNIX Compatibility + 传统 UNIX 兼容性 + Compatibility programs for migration from or working with legacy UNIX environments. + 用于从继承 UNIX 环境中迁移或者可用于该环境的兼容程序。 + true + true + + mksh + + + + legacy-x + Legacy X Window System Compatibility + 传统 X Windows 系统的兼容性 + Compatibility programs for migration from or working with legacy X Window System environments. + 用于从继承 X Windows 环境中迁移或者可用于该环境的兼容程序。 + true + false + + libXmu + xorg-x11-fonts-ISO8859-1-100dpi + xorg-x11-fonts-Type1 + xorg-x11-fonts-misc + xterm + + + + mail-server + Mail Server + 邮件服务器 + These packages allow you to configure an IMAP or SMTP mail server. + 这些软件包允许您配置 IMAP 或 Postfix 邮件服务器。 + true + false + + cyrus-sasl + postfix + + + + mainframe-access + Mainframe Access + 主框架访问 + Tools for accessing mainframe computing resources. + 访问主框架计算源的工具。 + true + false + + x3270-text + + + + network-file-system-client + Network File System Client + 网络文件系统客户端 + Enables the system to attach to network storage. + 启用该系统附加到网络存储。 + true + false + + cifs-utils + device-mapper-multipath + fcoe-utils + gssproxy + iscsi-initiator-utils + lldpad + nfs-utils + nfs4-acl-tools + samba-client + cachefilesd + cgdcbxd + + + + network-server + Network Servers + 网络服务器 + These packages include network-based servers such as DHCP, Kerberos and NIS. + 这些软件包包括基于网络的服务器,例如 DHCP、Kerberos 和 NIS。 + true + true + + dhcp-server + krb5-server + dnsmasq + freeradius + libreswan + radvd + rsyslog + rsyslog-mysql + rsyslog-pgsql + rsyslog-relp + tang + tftp-server + + + + network-tools + Networking Tools + 联网工具 + Tools for configuring and analyzing computer networks. + 配置和分析计算机网络的工具。 + true + false + + arpwatch + ipset + iptraf-ng + iptstate + dnsmasq + freeradius + libreswan + radvd + rsyslog + rsyslog-mysql + rsyslog-pgsql + rsyslog-relp + tang + tftp-server + + + + networkmanager-submodules + Common NetworkManager submodules + This group contains NetworkManager submodules that are commonly used, but may not be wanted in some streamlined configurations. + true + false + + NetworkManager-bluetooth + NetworkManager-wifi + NetworkManager-wwan + dhcp + iptables + dnsmasq + + + + performance + Performance Tools + 性能工具 + Tools for diagnosing system and application-level performance problems. + 诊断系统和程序级别性能问题的工具。 + true + false + + iotop + perf + hdparm + tuned + sysstat + pcp + pcp-conf + pcp-devel + pcp-doc + pcp-export-pcp2graphite + pcp-export-pcp2influxdb + pcp-export-pcp2json + pcp-export-pcp2xml + pcp-export-pcp2zabbix + pcp-export-zabbix-agent + pcp-import-collectl2pcp + pcp-import-ganglia2pcp + pcp-import-iostat2pcp + pcp-import-mrtg2pcp + pcp-libs + pcp-libs-devel + pcp-pmda-apache + pcp-pmda-bash + pcp-pmda-bonding + pcp-pmda-cifs + pcp-pmda-cisco + pcp-pmda-dbping + pcp-pmda-dm + pcp-pmda-docker + pcp-pmda-ds389 + pcp-pmda-gfs2 + pcp-pmda-gluster + pcp-pmda-gpfs + pcp-pmda-gpsd + pcp-pmda-haproxy + pcp-pmda-infiniband + pcp-pmda-json + pcp-pmda-kvm + pcp-pmda-libvirt + pcp-pmda-lio + pcp-pmda-lmsensors + pcp-pmda-logger + pcp-pmda-lustre + pcp-pmda-lustrecomm + pcp-pmda-mailq + pcp-pmda-memcache + pcp-pmda-mic + pcp-pmda-mounts + pcp-pmda-mysql + pcp-pmda-named + pcp-pmda-netfilter + pcp-pmda-news + pcp-pmda-nfsclient + pcp-pmda-nvidia-gpu + pcp-pmda-oracle + pcp-pmda-pdns + pcp-pmda-perfevent + pcp-pmda-prometheus + pcp-pmda-redis + pcp-pmda-roomtemp + pcp-pmda-rsyslog + pcp-pmda-samba + pcp-pmda-sendmail + pcp-pmda-shping + pcp-pmda-slurm + pcp-pmda-smart + pcp-pmda-snmp + pcp-pmda-summary + pcp-pmda-systemd + pcp-pmda-trace + pcp-pmda-unbound + pcp-pmda-weblog + pcp-pmda-zimbra + pcp-pmda-zswap + pcp-selinux + pcp-system-tools + pcp-testsuite + pcp-webapi + pcp-zeroconf + perl-PCP-LogImport + perl-PCP-LogSummary + perl-PCP-MMV + perl-PCP-PMDA + powertop + iperf3 + libpfm + papi + tuned-utils + + + + platform-devel + Platform Development + 平台开发 + Recommended development headers and libraries for developing applications. + 推荐用于开发应用程序的标头及程序库。 + true + false + + fontconfig-devel + freetype-devel + glib2-devel + glibc-devel + krb5-devel + libjpeg-turbo-devel + libpng-devel + libstdc++-devel + ncurses-devel + openldap-devel + openssl-devel + pam-devel + zlib-devel + atk-devel + cairo-devel + dbus-devel + desktop-file-utils + gtk2-devel + gtk3-devel + libICE-devel + libSM-devel + libX11-devel + libXext-devel + libXft-devel + libXi-devel + libXrender-devel + libXt-devel + libXtst-devel + libXv-devel + libXxf86dga-devel + libdb-devel + libjpeg-turbo-devel + libstdc++-devel + libvirt-devel + libxml2-devel + libxshmfence-devel + mesa-libGL-devel + mesa-libGLU-devel + nss-devel + pango-devel + qt5-qtdoc + qt5-qttranslations + + + + print-client + Printing Client + 打印客户端 + Tools for printing to a local printer or a remote print server. + 在本地打印机和远程打印服务器中打印的工具。 + true + false + + + + + python-web + Python Web + Basic Python web application support. + 基本 Python 网页应用程序支持。 + true + false + + freetype-devel + libcurl + libcurl-devel + libjpeg-turbo + libjpeg-turbo-devel + python3-magic + + + + remote-system-management + Remote Management for Linux + Linux 的远程管理 + Remote management interface. + Linux 的远程管理界面。 + true + false + + cockpit + net-snmp + net-snmp-utils + tog-pegasus + + + + scientific + Scientific Support + 科学记数法支持 + Tools for mathematical and scientific computations, and parallel computing. + 用于数学和科学计算以及平行计算的工具。 + true + true + + units + fftw + fftw-devel + fftw-static + gsl-devel + lapack + python3-numpy + python3-scipy + + + + security-tools + Security Tools + 安全性工具 + Security tools for integrity and trust verification. + 用于完整性和可信验证的安全性工具。 + true + true + + hmaccalc + tpm-quote-tools + tpm-tools + trousers + scap-security-guide + aide + openscap + openscap-engine-sce + openscap-utils + scap-security-guide-doc + + + + server-product + Server product core + Packages mandatory for the server product. + true + false + + chrony + polkit + realmd + openEuler-release + openEuler-latest-release + timedatex + dhcp + NetworkManager-config-server + NetworkManager + + + + smb-server + Windows File Server + Windows 文件服务器 + This package group allows you to share files between Linux and MS Windows(tm) systems. + 该软件包组允许您在 Linux 和 MS Windows(tm) 系统间共享文件。 + true + false + + samba + samba-client + cifs-utils + + + + standard + Standard + 标准 + The standard installation. + 标准安装。 + true + false + + acl + at + attr + bc + cpio + crontabs + cyrus-sasl + dbus + ed + file + iptstate + irqbalance + kpatch + logrotate + lsof + net-tools + pciutils + quota + openEuler-release + openEuler-latest-release + sudo + symlinks + systemd-udev + tar + tree + util-linux-user + bash-completion + bpftool + bzip2 + chrony + cockpit + cryptsetup + dos2unix + dosfstools + ethtool + gnupg2 + lvm2 + mailcap + man-pages + mdadm + mlocate + mtr + realmd + rsync + smartmontools + sssd + strace + libteam + time + unzip + usbutils + virt-what + which + words + xfsdump + zip + cifs-utils + cockpit-doc + ima-evm-utils + nfs-utils + traceroute + zsh + psacct + libstoragemgmt + nano + rng-tools + rsyslog + rsyslog-relp + nmap + pinfo + plymouth + tcpdump + vim-enhanced + wget + + + + system-tools + System Tools + 系统工具 + This group is a collection of various tools for the system, such as the client for connecting to SMB shares and tools to monitor network traffic. + 这组软件包是各类系统工具的集合,如:连接 SMB 共享的客户;监控网络交通的工具。 + true + true + + chrony + cifs-utils + openldap-clients + samba-client + setserial + tmux + zsh + arpwatch + chrpath + fuse + iotop + lzop + xdelta + environment-modules + libreswan + nmap + tigervnc + PackageKit-command-not-found + aide + amanda-client + convmv + createrepo_c + freerdp + gpm + gssdp + gupnp + mc + mtx + net-snmp-utils + oddjob + oddjob-mkhomedir + rear + sysstat + x3270-x11 + + + + virtualization-hypervisor + Virtualization Hypervisor + 虚拟化 Hypervisor + Smallest possible virtualization host installation. + 最小的虚拟化主机安装。 + false + false + + libvirt + libvirt-client + libvirt-daemon + libvirt-daemon-config-network + libvirt-daemon-config-nwfilter + libvirt-daemon-driver-interface + libvirt-daemon-driver-network + libvirt-daemon-driver-nodedev + libvirt-daemon-driver-nwfilter + libvirt-daemon-driver-qemu + libvirt-daemon-driver-secret + libvirt-daemon-driver-storage + libvirt-daemon-driver-storage-core + libvirt-daemon-driver-storage-disk + libvirt-daemon-driver-storage-gluster + libvirt-daemon-driver-storage-iscsi + libvirt-daemon-driver-storage-iscsi-direct + libvirt-daemon-driver-storage-logical + libvirt-daemon-driver-storage-mpath + libvirt-daemon-driver-storage-rbd + libvirt-daemon-driver-storage-scsi + libvirt-daemon-kvm + libvirt-daemon-plugin-sanlock + libvirt-daemon-qemu + libvirt-devel + libvirt-docs + libvirt-libs + libvirt-nss + python3-libvirt + qemu-help + qemu + qemu-block-iscsi + qemu-img + + + + openvswitch + Virtualization Openvswitch + 虚拟switch + vswitch installation. + 安装vswitch。 + false + false + + openvswitch + + + + remote-desktop-clients + Remote Desktop Clients + 远程桌面客户端 + + true + false + + freerdp + tigervnc + vinagre + + + + web-server + Basic Web Server + 基本网页服务器 + These tools allow you to run a Web server on the system. + 这些工具允许您在系统上运行万维网服务器。 + true + false + + httpd + mod_fcgid + mod_ssl + libmemcached + memcached + mod_security + + + + x11 + X Window System + X 窗口系统 + X Window System Support. + X 窗口系统支持。 + false + false + + glx-utils + mesa-dri-drivers + plymouth-system-theme + spice-vdagent + xorg-x11-drivers + xorg-x11-server-Xorg + xorg-x11-utils + xorg-x11-xauth + xorg-x11-xinit + xvattr + mesa-libGLES + tigervnc-server + wayland-protocols-devel + xorg-x11-drv-libinput + + + + development + Development + 开发 + Packages which provide functionality for developing and building applications. + 用于开发和构建应用程序的软件包。 + 90 + + additional-devel + development + platform-devel + + + + servers + Servers + 服务器 + Software used for running network servers + 用于运行网络服务器的软件 + 20 + + file-server + ftp-server + mail-server + network-server + web-server + + + + base-system + System + 系统 + Core system components. + 核系统组件。 + 10 + + backup-client + debugging + java-platform + print-client + smart-card + dial-up + hardware-monitoring + infiniband + large-systems + legacy-unix + mainframe-access + network-tools + performance + scientific + security-tools + standard + + + + desktops + Desktops + 桌面环境 + Desktops and thin clients. + 桌面和瘦客户端。 + 70 + + base-x + desktop-debugging + fonts + input-methods + legacy-x + remote-desktop-clients + + + + apps + Applications + 应用程序 + Applications to perform a variety of tasks + 执行不同任务的应用程序 + 80 + + graphics + + + + minimal-environment + Minimal Install + 最小安装 + Basic functionality. + 基本功能。 + 1 + + core + + + standard + + + + server-product-environment + Server + 服务器 + An integrated, easy-to-manage server. + 集成的易于管理的服务器 + 2 + + container-management + core + hardware-support + headless-management + server-product + standard + + + debugging + dns-server + file-server + ftp-server + hardware-monitoring + infiniband + mail-server + network-file-system-client + network-server + performance + remote-system-management + smb-server + virtualization-hypervisor + web-server + opengauss-server + + + + virtualization-host-environment + Virtualization Host + 虚拟化主机 + Minimal virtualization host. + 最小虚拟化主机。 + 40 + + base + core + virtualization-hypervisor + + + debugging + network-file-system-client + remote-system-management + openvswitch + + + + + + + + + + + + diff --git a/oemaker-3.1.0.tar.gz b/oemaker-3.1.0.tar.gz index 2cdf6e47b49a6f0397ecb26117b639c3eeb61f66..c0b2a4d83f330189afa04ccdbf25304a5956488e 100644 GIT binary patch literal 146959 zcmV)$K#sp3iwFP!000001MI!+b0kNaAGTlFVTQi?W3q=MU`SL0-FO?$5^twCfyO0%`uYJHEazsg7zU!G=eLdf?<`Hup(pSx9Zlk9&-zlfKA zkVc(6do|Ty_VQnAt**?=|296O{5w(D4SF|R4W=vqjn$2{jm^!?CY1mB`pWve{BPs4 zm;WG&!k(LS`WtIEP#2~z|IL-PHEjQz8?AZy-^w?+{F8V%2-55&!oULFSX-+u|JIt` z|F@d0)wS=Dl^aXtnD0AY{!sRzKWHcg{(9}3j??_Ry>D{+cS9FY&vnkzMyK1mMi}GU zf2-MCZyN2t1*5^d{olrS=fY3YAPTp3c0bzPf4z2xJWGA@Xy^FwfCM4r&0yeWU{8j= z7r3w2I$jbD3$b3}#{Hn<4hqrNYXU-<<2)o;-zO)2md9kf=Z6^quew2!X5=i2ve#?$ zH~u7!vdqi`^C^3>l-Js17_&>x*eZsL)FJBsoweZ6*GAdYj< z0mIOZxAGKBS6pOkAx{_3?a3(3{2{mud%4?#knk7r!}hb2#`qAc3-`kfd6&%X#d{+1u6t2D+auoZQ?U zlxCqj^tT2PWEGkk^p_V6-5_MKIL1tg-82P9-s`ml1HD8a(@rvqGv6a`ZoGNb`S|10 z^I_|q-}lx(y5GNe^B_6<(MP=>G#);3k3We{pLF6cTWNR{KDk=m_~2RoXfyxvgO$DA zgO65!@PkiwPB#W_=jfBw*6&|>;p)i$a?KrGj)tcL_i)1vzkL4t_p|WB$JvxFCx<0ZibuR&NAv72Ch z%SJJjzy+<&M*s!1qIU+qn_x<`;-@Hg2g$%>hCw!P&wTt%{ZCl{uh;IzZs#287uLaH zKFESWaE1xZ;2A*#qxff&(xK1s&31tzqFBFdA%#^=y`+>!uGdJ~9 zS_q9WLXbjzLnsJ6>K6XX{0ch@oI|=zd~lv6ZpZW_3A~rkhE&MJ=q z2i?@>a|cSo2FF2UAQ0bkh=Jn;9Wz@CI}?qnLv?RTg z$Eg)gjM~&0C3)(kZaQ#EQS{Ehs%MAGej{uk{s0Eecxa;73pzt=sEOlWKyPpJtt>T8 zV3G$h4qs4%AuP|$+%ckt74+OT&x3B)QZKwAw9QUrwoflgTX`5<87NeXJac$=Z?iM7 zd>FTf{;-`zkx__#tDC||)3X(euruHRO8~ln-_@3;yR2UhKY}iIHy=PgCq8t5sgZvF zDt0p*{mc~vwJ1S;$H2P5z_&yNVcsp3a1#kVOL29BIPLWP&Uv}&3o8Rod>@Ac1I^78 z_uNavWzRb^q6ytF%%+1Oi~y!Zmibq>}+IUDc0vJ6NSEBNBS_= z8w8A4Z-5(=|QIc1tm-);1dxyYf4B;Zapz zQdk)%MARl+jz7+`u1Z+e={rdt;gQpqc&;a4K4KrT28-h zFQ3>}zv52db~?5e6kmRsyRZrvm248f+jf)0E!(6%R2jcqKB*6>$geE;5T?%N&`B*~ zv#&)o?YAso8OprQ+i#cQQQ9pF<3cqmM>%uTuvtbeWuDpVZWbhQ*;|-FLiG(4yXe8N zo%&%KCAN`b5J7*Hx#oB|NTaTaq@C1k`MELQhqb(IxrnfVJU5a*bb|r5g(A{uzA{BZ z$1Lihr4tUJzQeNG!Ns-kuK>%D<2DB9XHFUpZ7USCvW042=Z0y=Gm$tk5m+Zi-7Go} z9h?WB4Jz#|7NZoWOJxgN98(s@5^4Zh?3HRnm=E1fHn3#~vnhi{!Vh6Bvv+i`XYr!2 z(otOe3_P=gL=-w5hqaZ|ZV65F!fcG(&Ia0&#cgyjZZ@6s04e~i?K7*D0lGsINHX6u zu{6Cju})Amxht$pG%-pHmfQp9VGh*;h7xD*^jNJ(eAG?>% z!}1pw1oqqnmc29I&6sfPk%Z<@K#4QePx-PwVax>>Bu_Ti3m@`L@-{usC1 zv!Ou`WqA?hqZEP+pvhYH-@p=P5LpR? zHJYtFxQz~Gt}zH^ow$9O(31??tW32wY<#!mc^*P;7g?J<*Y-p6u(acf8Q@r!>leY$ zx*3hQANFw*(<|F3+xtbB2oGT$F*Mh^7eSIamwhucFMDPedf5*;#@zbKdOmXX+>(1& z&vkPt2cDM?%fhaRKK$l2vq0QD>!<#pbmAd#>;5_Jmiyhnaovrzadu9}!*gw$2rrK! zB9%MvX&>^u9F9EkfrcK*1o6`>$GR`h2@?l&((|10rfri7gW zZY#lz$$zOZCh$L78yhW?|GBcdIp=@f#`o^;T@44MAc57Jjg>l~(-~O)ZPh6$s{VWL zy!<5&hqjHxqImc;}<{ssqVz{S&s&( zfA1)Xyu6bUx^wsLvT9Y9o*2&m_v8Pj!jG<-53={V?jZG1f*H9j?(SX$X#fj>LPCYO z6ek!VFS~%2P3+xenTzlGA&jI^IE1;clC3dIa4Bbx3jB93bAuH6t5F-4Nq+L)I>=}M zm!cV?WL^P@npT*Kywx4NyKH9XyBJq2fV6Nj#N*0>^tM$;dKP${ICs-Jpl|q&N z_VX}}{lP%-rGTp4jN-l@sxBx{DSwVju;z;D0wA1bRXU+3S5dc%EFnuCtJYXCD*eH; zffyNoierIQyBcME-3bM_{JYC)rFwU{=pJvj|F@6-SNAvCH=_DOzZvv@n$0HQ&5gCW z{?F}vW6S^LRe$I=QU9m8Y0UptR@OG=^S|5pIOT^G_odT|MN}h{}jV6Rs9hLsr92liYe=J0-^$G>OTUPnm+|prSv20 zb$y=_tRrmOTSB5RBvvT>2td{M5ujA{(I8=x3O)jnx;+9CYCQr$jUHjpm3d590elzg ztRF{;QjVt8BPFRqk7^vN%OeDZ8jnO0Ssx7LodTA6I~t<-Ly;I3l1eP829Gcl$~zLM z(Aya!P+>R5nW?B_m6B+ma}gE5$U>>ABM_mbBalKtM*zBRjt)zsrjb*ihB8hGmWZK( zW5X3`u6R?J%Q`ngQc<_jFx7-dPK8nG*Qf|@{3@gv3WXYpsJb*IR3e22jR0~b>Qrw= z7*J(K7!++8i7ARQ1}M!`Jw`PN%@_@A1RM7^ir>O!7|Y*GEk+ov8Zp9_D#J+A(1;|e zz(|8Ud($w@bT*R4LIXwsco10_gx-q)n97SV7TPWXuqe6|cB+nx!0hTR!kTNgNHbSz zk$_%x6jhc2;#w?)Q7W(qq@=rIvoS!$D3w(tHnOxjp`s!Hp`D^4(!g|56ytbxltPed zq6h<1LQ##%=pYC}vI9M8&C^i2`s96CKfvs$NM6*AS^qqM=NYM1`mh zi3+HroT@pZVXDbjXFi3hh-%h`Bd#E#7*RJwGg7q>6^Vvg;-oT&0-_#>YLqG<3OdkZ zj*1_uk?MRXfKA;)wHBHl8pxGA6im_YP*J0FrB;Uu3WW{@l)4-WSg3Jm5Tk@>5Le#N zusG5(f~st2X3fMDHB^M^Xeaqv#(VPp?0BS zx!&%mvV~KQ0aLv;3{|HE1#A8Vx#DC^Km2EP4!@!$O5Y z_id8)LP`3i6&Exg6`h3=e&gy2B82mvvGAa}3&J4O76igH7KAaAV`n_#dmXE6-lX8# zE(gp%^%*ytkbOAw&ucS<@4i8i7H)ivMHBg177r?nxFY*92JkRv<17aDuVwM^nCJ28oOi(pn;3VIODe8cT-zD`An~emi z(uXij*7qnxb9H+~(fcSMMdd?HUAJxv?^D|F`nZ`G0f%-<<#VP4WN4 zuuBPm(j*yxI;I*02T;W{5}>q@EI@%((Ez1@&I2st2Ed&35|wN~ z9g{}M2b7Q`1WHUW0wsi$KxxuBfhAl;Cb0q)QA!Kc%wu_hQc@5D6(~_^ia`w&xa0=v zknWet4%9%!RBW#)NCiP~oJ5u7IEN-j&@QIH1xrvx%p8?GK?w<>po9vhphR@4pn)r9 zjVvf&gDqIb70BQVS}jz0&KMLxnKCG470#dzYDQ!Y3bUjQY7p-&G)y%W%s~ZGse@%$ zfeP}VL~=D1ls+g;$RCs@g+Qo)3WLx@6@YRGHKQOA>Zrydlvcx7F)$vXG+T*;(wgqE zE5@N2TjUZdCP^mLLEU&ZQp^RPP$IaSB}{@*C=o^}l;&bPUm_M#p|Dh0g%Y&W3Z*^g z6)FHH7AlBQwG?Whz&N*1m?gPTLM3*g)yhOwvm_WQ;KDs39tov1Gxij3#aZW@-vHqX2X| zqX{d3J5&vn(WsayrBRwSPGbpHkwhttTcI`Tp_O@!ru|D18+FeVW}|7bXCji@XtSs! zH|oNZ*^P$$ZO|L_AgAIt>Q3eaM?1k$&!uS@j=HNUD2}>=YjYgS-f)tmZZV$asLOt< zX^whSInU7m3!PKYG6=zUlu)Fupd{l_ zLX7e#&6zUBnxse7Lf?@Qv_}=WKJU@=ziZ$4_J14v&*tVzvuWP{xW2JIZ~wRP z&H0~m{^y+k`AzXZ#js2HpVB1xpE{-*b*`thkX%oJRdGF~fX?+S;|9d`2P9U|Iwhjg zIwdM;ojN9slGZ69N$ZrDpmjhDIif9~81J})CIh;~ba5xnxQA*q3a0*;< zICV((i_$fvsn`@$kP5oyIEgCDaSlzord>>d1vyhff}ANKLC%y=LC%zjPR=xN#jKGt z1#FNr%eVp=rDD$mK80w|L+rL02E)IrUNsR8=f#Tl5Y85x+mnKCdnC>rW1l?+T3MFys3mJCc49vF#02Bv1F z3``ZVF)%fI!NAl}&cIYbg@LKTX1PlSriKazriw}irivB}OdVr~Av(qxm^v6odah6g zrVi*v#=z7d%D_|+eqO6X$iUPPqkOV*9bybj6_E@~4Mhf~4)}VV5e!TX%#DW1h?XiM zh?Xiy36&avgh~aNicl%#1))+xNT^gylu#+nxiZI-gh~xkOwW}h*$I`3HKk5Uv(X_< zrb?Qk3ZPLXHP{TLyw0FhNyQW=s;R_?wAmRTXGChC8IOVysUnJjGa@CRk|0e~2b9F< zB*+ph5y5oS5S8gzvfxZd6E^`f$_3L=06NprgcZOYss_q*RLqp=D9swvu>`9~qU7?e zFdg;K%1lSo{-v0Xx@QX0(X`kz5y^D4SyVC|b>YcOM??NLn2vgoQ!yQNCv&Ewo$09O z(zHxR-EK0`Q4i(XM8~o>oam@qj3+wkvfmz7qaH8LYBa!t)u_X>uo`uj1*_5UZxXAq zEdJ80M%_z=)mXN;aaN-YB2t$ilENqmYa}Ocx?hxcx@Uccx@W0Y)KYjsI)dk zwxG2Mh|=1miPGAH@v5{xThQ7RK>pTJ^<3Xr54$32@SE3`0>SGwU^T1lyh^OJFNiyV zem8JjcVn#zcRC)PMVZz-Pm6%9yNYQa@=o_#?kYorie$u1nw@Z9(Ch?0r`dg{KZF0l z{xsszO@=X^|F_v}t*@H=zh-N7&i}ZL@6H>`d73Q4Xur((?zKC_dCMU%*?-E~BC>|w2ub+{{&OP!$?q2!nb#n#mF9g1{(GlE zwg&@3ouvep8MrmzHEO)#kwMUbMZfQnJj8Q;q>CKn12-f`C;Q~0)u??M<)j1VJoUjg zND1z%;0_mYI~|yY;!%ATQHQXA8>Yk!JtPu%^f*5yQMba=p*tecS>^^Ialt`6LQz$W zxY+~xaC<+?;s?viJgSXOly(MUP=@ar0Ja~F|O7`~-_D&(B(?c*mb@rY< zJ_hUEgWad6OXOhp_|XRt#P-9z{k_vq!7K83@02`-zuV+!`}lP4(X;*SZgetLdz)I?c`6 zj?ac7D2oS38uF+|(9aO`C8A6VH>1J9)RA!N1R3C=D6MogSnI&#o484j64MKFw-aWA z!Vsm!FWhj&*+*ec^D~@Z!}3-jK`(TL%d6p_;b$=AY;<-9{tzbWr(hs%N_J0$i~hjB z5&z=NbD&RMS!hrPmWf#S?U#j_~ZgcZ+^wog9*Z|m5X&;_8N4lc*R z)zFR8WhlwrPq5zZws-c9+sC^{hdbM++vp0DiSyCACULa==)>(NyO@vlBhIL)*Y-{h z_xGMY`=tHo@e{OxJfSny<>Cht6~QA&t||uR<%frdr^`6OVj`!yr9@}7@kilk{>`btYM{%@ZvEs0>>Q+JM_S(p@2jPhit3Lh!-L_u z7bNZO!0mw#tPW`QY0_!qz_LZ2MxkNn`Ds>Z84bKP3=&@6$=cW$tU^H;=hvLZ&L^&-67ASq>T$Us{~JWwE#v51uEkl`j_Jcs1J<5+0KG&FvgpSQs@^< z13S6jW;+Dq<29w|dD_N)$7+WSj8|-1L9htNL8n@%gC$>(I&A{jsH&X{+cwQe91$kS z(X5<8ZWx5^GrSv8L6I07XDeSc7;A7*8N_;ihQqnpOXGncoxJ_QzkKnF zpYJ_7eEN9r$&0`Ge}40S{#lKiARa~M5B{NFG#lEC1h9x}#;o0eiOv%7Ly!N$s)W`& zCcj(NV*6v~swa9Zp#flcfGuhfMa3rY1|Jv+~`Xqee4V~7xlJ`q6 zovh!}9l)T2ELCu$`Ozr0!qcMC+$rpT^(X)Am%sSGfBhf+L+dwx_OoC9&Ck2;Fc^$} z`TzdeuYU4ZRFVO0bgg>JL;9>G^9QAi1X~6g#UtL-7Pc1deb!Vm*dDW07BfDCC{Zg0 zm8!U{R>!S09;trK7QGD?Jsgx~h}(ueZpIKdZLD}bUSV|-An|BWbGL#Rwfxee4xZA6(U)xTQ#+WD#p|5{(y8%$edu`0ex+Dc}cuR2!O z_e-sR<@RsR-Y|g#68H)dHzsxEcv&ZbG;$1@7(b&?8xvk@Ihs{*_9T|8+N&rx+pN1( zZZDr0OKQsTn7W+I_*gq^+J&`|Q(1J^(AuH@g^oNAyv2LiudY}+QE2mcfCe#!1${!* z=#t<92K=7?#v7GAqAhHC4p#)u7oK9v0{1a#I6+8^tv_=nU8l#G1TsS80J_woqI5%I zX0A@UA?+Xq6I~%Mj!~8D(qA~I5@cl z=Xk5ig_~^E(Htd^hiyEErMwcbhHP^4LAF(2&ZsyGO~?|Q(vA%V7PqMyOtIJ%e)(6K zkEn;Raq6Qo+~g;HuQkFB{}O6Za+Dk^PqE17Zz$L0;IEaJrH3>=qg}h0KAh? zy;u7k;V%d2Ug=m5c^9a9sP~G(OAZqbkMmUBUr>EEaON+7q9m8d$WNEUNK_=8@Bmcj zEgQnXrFwCr51s8IW}jcPW|=l*2A1WrQh~cSa`;N+U%pzTyCsKKiYVyVg5tUQ1(qy&BaXvpKFqV|Exioj>UGhPm zW(4)ug6@czy&66K9M@YZ-Sn!~{o_56$d(OK%*{n3ruRzGI59&;Py8!brq~9E)!MiW zTeRXZ(AC4Jeh=1{w4VR=7ysfnfB6@`{@;G?{Pth{_&5LlC%^ggpS<|P|NX!G?Y|5o z=a+x;N6c8tYEj=HKQW4Wo*Id#@lO{`xA*k%mgm6n(E;s&h!<5PUdw<2ur!1s_{4Vy z_@f*F%W}tPCD%xv>4!a;xGXJ>^9VoAdzo}w+IMC8OEE0vL(%%DNxo6Fxzp-Y8>7wj zk}JEX%2XB+DJ4$!rr4~@UEyYJ`cx;Ac+FAd+Tlra^$Wk1iyf?<$tt&f$D&eCY$XMUx>DotrT6{_fmXeA?e(}GfoI|HH*QVOUDqBQ6@ zP1be5T5&KKl>&GSGmEs(D>FuvUeHy)S6$&nJyLdTr(1^=gN5KdYP+T7<&ct+o9NP6 z5|zC&8U>M=){fWVJI7k9wlBD*Xm_Q)RP;=^;GOK45Exjbit`hW&rdAT;S6Gj>TAJL{mDZkrtQP6{ zSDlAUdb03@d@Q$&Su${jOdOw)RT=*3Iyc!0X6)U%w0EO3bfZJNLtgylAO7agfBM^h z`>$X8#h?88fB7fJM+Yx{_EW|Kq8eaG+EltYtQoc)taA5;bK!)1_4RVWXkG@x4Xw&} zB5t5NJStfDNK1tb9t7-8#R(nax|zk5{-ozY92*|V{8uteE?-NTWKKJ-u_#r&Q2Z#( z-jr3Kk!d33W#`IRIJJ9D1=c7|BCQ0rKdw-S>vgdjpd_0h)O{_DREtbZ?n5(H z4db=o%CBBG#wHQk+h7ST6k8)Y`s{(ph~b5(X*dvPL>wpaVK#K(6Q@I$?@n>zM2~B6 zNrktn(xoh}td_r8g_Yyl*X4y(dD2`i+p$eYE;MbE`z4XsYitx?X4WxMQ0?)03b6Y! zheSb!VX4r4fby<7?O*5=#M0QtZXv9f`>|jB>EFKi+dqEsvp@OdV4qR5_>Pf>2Tu^x zaEYnfY^@Z%85S50EpIam@)ndaVU=p&hdsJoi!4NREK<#EN_7im8hEQ8W`zb6)kLpZ zQho~}^0o}QfgxpAxT<=Z%JEfkTnj#&%VF>9kXjUQsXTBsVYij&2w;b7tx zi@Eb_-Fw452kvPDJgxJkhL7XI?kPLVEsYJPHVE&vuv2AhOC-;raj`g##@le|z=0^E z3@^~T|CV`WKka0teh=D|(S?i;j$a-yb9mg{ z>;VpSk zPurf~8My4u^DR7gyJs{5&5MQP?FH5V3NnMzSu++jp4JIljpS|$;_<4VWQ)z}?e_Y+ zZ|odCI{ox$7hDZvSalL|^z7mO-XpT$EH85<@Org-Q$L)lhc7ShobC|3cq*m$tS>L` zK3zbs7ib_2FY^}O)0UD&lu-qPPIDVSih^*lfTf^JdFuP;iz`cH#b(J$NA=Yvr7l~` zJ5)}uboQi`)ytlvO*nTt#$nx0aG5Lyty$-c8tOit%m4hZfAfF+$%~)<$6x=)Uno>R&yUlYrWeJe7lv2n1)V0t+!uWs zvpUqa+-_pei&GWTXqs&=A$&tSU)K51E86**eIo`#rR70#dhw*#2)0!=UQF-UcV3D` zy;Oqd3&7G$(z<1R{kBq3``@vh-O$73HoX)pWyP|n8u*fO5M20Cs!}e%mnFh<*vweg zG1Ku46sOod$AfEVE*Ds3^UPEusoW=!3||;6JAFJ!QzN4GQ$>*2L$UZbf?-c&bP)la zy->>5QcBnb*{~Y8P<^$W&YL}B5#SOj<>n1^hFyLN|5Xvp*JEm@qCc+cq0`c5b-Z2h zo!Xr5RIUOAD;#$x@fj1Ccb2bOurH*#>S;LcZIr6NNqbtNVOX+miKtgF%(|Y!4jLqF zYpE_f=Kc!9wdUoN`I*prUWA4MRF*~g+sI2%r!5ji9Wc(Ji(@!e3pMT&Ka18Sw9Uog zd2!ntEf8__8(lA{&Whrxir3_-TgqwPyFO!$MG0)WdaG2Yq^mi{l<-R@#;nh0o`_T> zfYy?kqhD@z)AYJJvndz-j7aCTdzOmSb&K-(s^s%^`xo3*a67U=Knu5=mDB*|Y*1*qTN!&HIVtkf z$304dUJ$l%t9gs77j-VZ#qy~^RqIz}EH%(r^x3q7^jPyoGsN^QEVGmHRZ~J z@3<}7R4lk>A6Zg#jCAagC?BmaH?U#rwU>y#+#twd)Lh)w#(NFcUfN1bmvD zv6jrW<`zvQc-8Y;FOy|2kzJ+9@)TJ$q4HrC`Q2dl`e!y(wk%2`OY_w4q_Wk{!ZFYE zx^jaragK@e4~TP0oP;<7;$UfDKjq-%YAHmY-Mn3|-r=Y_KY~Hn&zwPo&u*hC!XnRx(%L=g5IfKuXwk#pvr6Xzpw4M?@`s9ndTh;t^Ug7TK#vmnH?8(~2&xb3(Z z4aJ9e(3iKzCxE`qjjTY2DvPcWhG0kR&<99~;}0?<7DtetYziNJ!nakR^x2iWung8? zByT_|t7j>nZBi$D&q7CkiZfoyZK$j?Wh%wDzSfNQUe=o5xw5dcOy=eB>dK=KHLn3M zHC+lhZNGj|cdZb+3~#sefgNXcc4d0aU4DVKbD9r{{NU+Qv1! zeTI?=(tK#Bi{ry$ZkR!ULvP)BGOw4#%S{ruJ&zO-88bTHuS!JPcU$Wl5Z9P_Mp%UI+fC3IS6mNHXHUwM9@_H8H)`YpSJ8$dl@X zOwcx;I(gG1Q4_9Au1HW}CvOxfQ-G@VdMsCz+>BO}aur4?@5+IfQZtqQstiLgxRw=Eb=b;6WnAE; zRn^$g&DGC>#w{1ZxM1;^NDZHp(K2#~WPdReI;*9kvD)ZbN{|ahP1%mMQ%FTd$Na5`038?RSKW(9v@6E{ex$F7Qbr&K5&Jb8|^k#i)*)WI@oS= z^*DUbYxfwho2IXiiC4_-DYo=gElHuvhi-blxDst{GDy5?#^#x-L;jdoQHg?VkqO_M zzfk)sKIQ#a_Tv?VG5-Bm`Wf%PuC1@GeUGfag1D5v@A&(#rSkW~3z*O1!>Wz6e=}iV z0dK6WRh55hb7j*g|IJowZT|l6ZF~>jefNzTd5g^Uv~R2B;C~fQ`+|2Zb^_Nx}`P^>{pZi_8kEr(I zZ=6IIf#*~8T_^>p17~@+3xB$K*rDZDd!tsn^9Fr^`pixHFcI=I;`p^ffXE&RW(8l- zdBGj>o4@=&Ui_zj{_Fq#uU`Dy|CU0j&sI~o+qlK&c&U%CmSuUm_2y#F&wN;^2PTtLqaiq)Bx@F6)KUy5Sa_Uc3Jp@-VbLBW5W6mOshuuudZ&c&ewmp@tu5n z^7!!S=~f+YDsi)3QlIa$eV4x3+y5Xq!=rP0Dcf{mOltqDYsUUhYrWOnn79Ai_&(zo z)1_b3(sO^{XR!F#BFn=tTTVwQJ@}x@DYUE&aT6epq5;#D*QM~neiW#6l2ME=rH|+p zwnJ~dHjF%|PAOO7N%6?Yi!N*Yp4kj4XdblC0UMqYEJc7!Lb2T|rR z3EV&2kNCZ+bldOB1*rC+@5kGCn*$4Kln$caW499wf^0;#pPhbibiDUb?f7IHJ@CV< zxSAEEkK8o9j1tdgMH99=jI&W8l`0m`U?|%SFM=cr@fJ^N^G%n@ZGN-2f4;FcLl~3V ze{0R0|F5++R_5*hHol{i=2rbPaaYOb`TL*u$>$$`@%iU(l6nod8@I5HK3Goa|9P4$ ziysWq###$hA!!!`w8r;(F>C_S`%X2-TmP=n{@q~%=K#}(F{%BpuQ$#1zq-0PZ~wRP z-MM?Tec&`3D>WR1(0+=G|`432@ZpLU|ZmffN}8=RTDT z^T8lGpWwCUha>8Dr$hBW>{8tCTFeLW@iAZlND}Bh3ZFjd{RH9?|0j! z=#yXRWVs^V-*iD&e6zQIJP_|?=ZzCa8BZHK{#g!C+UbK|jp)KplE72v2NU=IHjVLr zwbfdi^FMCo`^;XPU({Y>7YXCLEHPbJJLmoghG%+xd4|^+e$!E(e>d>W-u~ZdImL9* zfh8J!uEg$O}GWkL#gloOykDdD)QFYe+rL zk|+nsw2wE|Q15DY;3EfzJJ0raPY47!1)Dh~X&%!}O8V+p)PWG$ zZJC5mr^uq;=rzbi;8Mg-@bRRf8+!L@Z=O)e{it{BX8t~IBkYBlpIm?^D-ebkq`2@( zMI^l>ievC|iCp?5^f3*C0cX7r)o2!pSK{e*Q02U!&$BpsgbUX0D2~su4nS>yd`Jm& z1ff4DVvv$W>KZSSL|Q(|kZuwU3y&aGs#ildIVWl?9Oq#B_(R7LN$R+}L$cmn)BHGnG{KLogMQFU2SC>FNRgv0fXO|E zpHDIM%h@nq{siBnS8Pt*9=W2r56J@sKFOeX@ke3lAbs06ycH*0v=%kF4a5g6527%D zmA5q(Vhxs^;Vn^?I4KhLc&T1oJ8rx=KG{EfxV=wy_KtTSo$h_4G|Z3tKGYegflS@o z&9A^yyaa)cDo_+3N6Gn)IK8Jl0=z+xcLeCgvlLYjC{KZ80aT*Q9ma(9N3}P%DPMVAfVP}wgK5g%cx;K5Zl(I64&eB`P!lA;Cn4Dq#79Fl>KZz;=QMW7FqG%<& zx5Ca0TMu@5e)fHE!Z6Vpur45jj{E|$C+kB8-Rmpe4|KKAdmci+hR3{vecmIoB+(p) z%D`yy*sa7-O3MZlh32AjdUNmKAF!XY#)?21w7&AXce;CUw7-2S>fD>f8n$dv{Ow4t7sYw-1iMTM@U_)pzc)a>djAA{Lq3!&tWNVkjV<#!k@18{(R2=A`jm z5je~DV{HJ&I)kYgWqmAeuKz9i7~Dk+xf|5SYHu~(`u^wi+#*hbi$)lQKA2f-sfnl`?T}d(e&47cn*O}{{e6NLt1e^3{JvIA zu}8&Bg~HdDbDPa}XcM5Mg)=|9LDhJVF1kPxD7OQHrRV9jx~H09!z$zj%4F7g1F+`VuCcXf%pR9Aj+}dPiXlIwi5oR^0`iBEIPNxzdh6lX+)ANxHl8j(- z0j{>8*9sjd>2vaB?&q}oWl`~{Gpaf0(!P{N6$4IKNVJLvDOQx|GF;MoGRkMeek>x? zbL_8E%+$+1={K}?vA$@;f%gwr^5(#VDLv{9uch4^#0zUh7r&g zSTy8b;>X0fAZ>h?6bCXU!ydGSPK646(`9*`?;87mei{ufX4w9ly#HU)|5{&JTc5Z8 z+xV_={u2is-?{Lh;e^>#EU<~?zq(#J|7p(oAGh+I9PK^YZGW`0{bcv)=}vq1lhfnv z_V)3UlP%|y-^mVb{>}7Vga6T#{0~?lNAN3zg}RdtV40EH#)Zk}zef9CZLY4*^*?Xr z`-~SKtfs!G$={7~$!^V=*nbDV+1vjGfG`8}r=I~%9{)@8ztxSo{^zZHAMSp7uzj?Z zr!}euUTA^OoBDU;yT<%~lyg$6}sp1A^tn}U1R>gBIo~M zM3(?gaX@bG6ef@VO_TqaB-np67DZv z7|m$LMHH48mt*L=VM@h&i5vF=L(tgm*$bDu?qRW&txnbxgNY}YvyF-or!1Mf&S@r!v4A~9hq`A(+ zanA~56^r2^URRrt?ZkI^bfW>J^o+r8kvm2As{BIo61qL1PbNXG1(`ooT|(J+5B?FRugt|* zQ;{J?pe)%n_gUY~I5C*_H%K@WdBp2;qoy`hUgM#{(=Mo+3nFi!XTgX}DYCIdbxsRU zQa^S<4qPIe3gVSfDly(=L@>=$O4SDL8PsVyaMuV6he1Ew2mUN9p=`%%o_@{oFvEKfNL*ENr z^7qAaVD=cXk%Ns{*NGsQkW|>9ajA;#l(~9`fK{GSwG74>(JdYwld)WCHsLoapd5$iT;&&!W80qhSQj*Rbz`>YC}Kd{nZbZ#&|< zh{zm0V`W=#M_($Fum~C~3&v;D&>v>ds`MN|{T3J7*br4LxV@ee^sy_R6_9dX1A;Wo zkKVic~u#-tZ;sz&|A$2QIw<+tNPH`<_z8#E(XOTo+mXTFbBjm^=hLlD3> zDyb4ilrY-2HNT3)&DilFZClTfhe!gWEb$*Q?FKJF)mOq~>09V4S2&cslAf47)R09u z^)w2KJ>dX#=!a-YtqKX8Ui0Wc#@x^b&5Y~6Vi7P?7?bw@nx*?6SJzkO`+v9c{a2*+ zU-RY6AWdsE;t)P*!S?z0R+{hbK0Vz%e(&$CY~oZ1YbG1s(3+16Y$k)0OmGKtmv1^v z^KbfZ#`cfTsLpcqN54t!e{I9u|6AQyo9lny%6Es}+(R6vm@C$bBYjm?3` z`+HCKPLFqrfa%;>tQw|SG)xtyWnEy8!8cuAH~n3s{kI&y8_co+JfZ!!nw#eR?`x|o zbN=_Oe7Ni?T711(SDv84N7CD2ekzq z6zYNPKHXso(RBFomRDBVec#1BQmVU}`fk$cLmwDMPInN+@d$o{H(OLy#2Ju<_xDZ? z_qQMJ?!Ui4bzjND-6wlbH9wmxZT4gvdWroZEKgx+voNMVT!3IY(8b~++z)rL#R;Sr z<__~uL8N>NW%3%ehy1tpXy)>e_hwXF?a;nfBRf;i`bwj(cgWKxhHu0`QuGZL2>ZPS z40XDq!A%s)9?Humd3>7XMo1~WRSACWYb`~U8y~MW;_BwaEKz@nckAZg&3rSA|AQzB zd)QNMtj)#)z(Ibt^Z(WP`_H%ZU9ozW=knxjEnexs`AF z{U3ZK{_0JB`CVIV-SFr8$QHR8Y0t%%_IQ+s?n|3VmhB_~1-|b$Tbt|c?wJZ-oN0bt z=#KPVsH%OaZg7J;Pel-2yj$>haTf~TEtz=($KIhvY)_!)M}w%dwL-Yg=vJ1ER!BM= z=8dxvzQW@97h5Y=P3Q$4z@N=(t94d%TTnl`XAkgxtBO6Lo8R5K!EDjSnQu!D-PV@b ztob-5Bjrxn?PsDj7w!9SxJIhpiMzr4;CpZ1Wb)^GdB2n24D-J@?rf|L{MmJY=>Fg4 zr2W5*)s3|c5L`q3pN);yeE;t@z8T8jz0Te*ezWiYw*G(ip0!7E+sNb{Br}O{s<$1FI{&PQ%82=C61NdPV*Ed758x^L@5Rf5_22WS`TzYqPxjw`?wyDKzihr7{@b6w^v*wjd3CnC z0&aDA@oz8B@`;USPxj#7zV@DM#lKkv|0CLw&5fM@sP*$?X#Opq5w?BOG!7az!J+p5!FaS8_&O!P14@mLz-~aW8 zw_mJ2xW$0XlRM{wTR)2YI#ExI{yjX$$A8@xsL*(L4OY=sj~M&-93THzmse+F``^W@ zS5N!D-^=p?9XHngZW#1v?D^c$Ev{Yb38(gR@*4NC?h+1}1wVQA`wuJhpoHV~56?3h zM6z~qDIjXY#-(BYeDwutuH@@&!?G;9T~^O@)Zj^4p1&>#*mS7su$LurdrBGwdvT5g z@)%Ks61~X2K+mcfd3qKiVva>FssmZ9>Yca_<3zihlz|L3q7IbK35$c5y0J@Vy!pj1 z)?MMMHK1iaC@QJ}wwH_AYsxZHNJbSAR+dw>87T5?B+CWU^3Y+T@ZuVaqSj4WVNP4& zL}l?&(|J%V#FjavpT~+;)zIcZuA++=zg0$qyHOh6PE-Ly;e)OY7)Wdb^d;R?LU z_IcSh>1u%m{nqm-m4^Mzme8xPrp=GienLHTqa45seGYmc*7e2)F13tS zmuG$1R{h&jrOq!CZa(M9{O)(4`wATo@>Ot>gm&D$S{$SLx`*m3<38n@t1PR_qW{Mq zzj;fFlSWl$GTh^hf{5tpAdVazgVzG_Fw`-Or+T(S zb}pT^GHzS?Na1xj(7lV03i^}w_Q{$10ro8p!$5&Ct%qEH8&6q?rSqczpftF7aei@i zdH(WsC$>!F`J8;-_Co^(A<_kndW%;`R@y(U*{k|7-mqaKA~?BBW|kY z=9{uqOO1%Wo~fv4x`ZYo-^_SZVCus#;R?rL&{arCH)vTUw?OStfy^{ak>T^0=P;`N z+vrG<2VlHFvjX|fh{F5!AjX^{O7ub7mCeba))RJgORU%EWr&N`o&Lp3nzh5_>6kkY z1-_n(d|wwUv_*VO71Z}J?EcFLZ)sXPc#CL~eqz>1n67nCuv?MQFstvR3PqOr=pEH* z(Qyu52w3l(q)Hs^ZrCV!B@43gbfsi3hcKzpxXszQI$pSDaO=GGW#owsASy>Cl`Q*) zhE7lqKGjX;Mg+YayLQdE!zXZyb-n2275)bV6L_i0YEPC%fl?qj*W`=N-lfnqZ*y0$H~F_&)}G-?7R z+~_ma=97IIfEj?f5pz9h)u8VQ7I^%`V4cx?h0B*R^*0Kxm;9qlP+rH zT7{mz=tf#6Xp4}B=MBsNe2ZL10b;B{$t4tX}HWar_m>BaYesWbpGYe*H3sA#F#K3*>@? zzclduO6oVhTGIl}!>ZydH$A_}srF2OO@6^OnqL8fliAKe^$SIl7-T#|HlTB8I?=$i zm6rk3oEOv}C)+2xtX&LNy#Sts7^{M?JnqS4d) zK%!4YrVNGFNL`LR2XJ>KB)`XYRw-U}yW+9EDk~Vgs@|{{){XafTeP4Uc1Y*pC{VW)4$8Pzrl$=o>f+_*XX-zC!!( z%U=HiBjFcnbbR6a98Eeng7}RctJY1r6#Zrwkcuyn2;qlb;ScHuwNDJmYID`SytD~*CENNaJjSY6;tD5?~H zi&#bY+XfOfSBQ`qf>?;S+E4drtv5L~?Dr@Nz(h=Q<3`rNG_E`Mdh3z|2U+D3#KSg5 zlR#fC5W;ID@FnWQ2DVqj*FqFo3XCn9XjOnNL{djQ9sf>m^A%Io~*@!UpqIY%}0{y&c zkziIe5ZQx#ySa`7ochAD+QSI+@f~_^hS$$JM zTA4*I+qB%p5~SxlYTN(#>6_2dN=2JT@FL+_c&JCSeWo|CfeN8gp-la!EkMj9nK8%9 zcj*^&Iq1q5Bv#>~mbx@WDA0T^n4_RE9Sw1JD~R(hmSEN~n|gvd%=SAwA~QF&}Z_Eutq)1+EuGlrb`nHG3}>bF^q2#%3Kn;gLcolh(5 zJyO)=hyfCL`cR?TDjKXWnnVNhniu;;qRJv^Bq?|n=b;EY-5OP5@YU)-s%dpl>tyDH9ChO9$?qJYURVs^}1=iU%4yu$)Izxp> zv&|JM;zOt%-rEB4W^(9Tx2D;>9?<^VYD)3)%Ct*C=Qu);VAg2U8iJrx8zBV)tT{me zb$ByCepS>7B(bYdJnh4=AL5>X<47^E>>)(PU}bkh8J!@}Eo$`P9F@GpUG*nPeFtC%WYRE`y$uWX zz4_TSDpc;PU$wv+E~EKo5Lw*Y($Ov5326p9X){xss6c30W2Rhq@M+X%p~f(F9tA4P zltvD6P5iAfFWyQFyA}Swvt{V{>Pn)(O5=bm!mN!%rz`*vuB?p^asSCY*|k^69dMTk z5!{A^GF}|a_={7GfoP#FoiDi?>2)aprY$jAjEXT{q0}`<4baz4q9bT3lq{nuBA_HKp1p9YeUpNUQ0<{X zH)tGCPKZA0)DpYn5_{maUaxeWZ7M;$CLkU#S;Rf?Xi@5B?c;76Mp0QY0X@|n4?8r% zcIy!1J`tjI5?X9yh%5r9n|TTY9GbvS!*NeDCh;nSEQ|>fq>mWt^!qoTqosu`eIsO0 zRMFzsYguUL10ktGGnPKbtq>nj7|RcpUO{)#lZBenL$?uXelTfpG*E%&Mi0 zkBcl`Z{RhUolVdNyC;b$4pOvDrcSbfvP^*U7G+cNEEB$4drcG0=|d(wfUdrW7o2sz z`uD$hw{J3-&0UcL>DAsN6{sgKD&TTd;sj=}7bm+-acAM3X*rSFGZD-5# zv!nQSg{x+9gxOCPr?)GTtVP--?$q#PZZBn=w%A#KH_{jlx5*8Z#=Qyi%DusbY4=88 zmAN;u{wdKwd&2>A_vqf_AlJD!h1lMibki*qaLQc439GV|%VyV1q*O($@DaB4%T z87%{l7%c|G6@YT&&)?K_S%3Xzgb;vW7nHLz{k`haAY*q(j$PqKoi(m7+z+d)1KE&8 z{tcz;!?R0Oj?jUL2coY1iSgGZdE+emgrh3~N02VfN;-h6<`_Mu8bYI8SW5Wx(*p!h zstx^VoXm_H`V4M?xwZ4N4rrM}Cw~#$vED&&^#jXR6dHk29HrD$mQ@MJPJqvepdeV} zQ=dEsj|Y4o0$=%s$R=fG_(q$M=-QJfV+dmdLWtT<;3}TC_1B_{krnissGg&tVH(`e znswn^N-vUrVulgnC=oQu%D4+vnXL4jvFLO-ziIq1ohEXEZ-4;ToP>#$Da$}G$KA!G z$RB|tnTL1z;_%3f&G`I#G#A=lfS-x^X>Ao$JQ`Kz9%!+{Rj63akm}(QRMoShxduiU zUBetUN{a*t?&bbEtVMK^7=1sM#Eb+$S&l8aQ`itkU2BNJ4}(HPqbLc}TNRxmhmcgD zF*@$6xev11gol~aGte4jsYMvzaPvXn_zVgaCVfU zebQFcZcI!mPnB^~t`DXmNV2;m9z?+9a((PThYke}_{D_l+B-m3D)rbP+VyLdnj$r( zA4js(#VJVM5qdzq!_ia2z9ED&uw9PI&y7|+DXH*LmiYz5`w&>m zIpZ!Tdiv~GcW$Qd5hK{@B=5r|EOVg^52g*FiVX{Wa4oa!7&c59Cipfo7NHa(8^O#E z@budeYRX<+r897*tpF{n$M84#z=lXZF<#MrXW=T^%Xg}__O`v^paT)W7-ucRH8Fz+ zbb?y=5&8w67>cRHBO&_(DWA40JS2-Me+V@0Z=aCia5vfsRF%WGgE~ATPEvAo1fhr2 z<{?VyRrC&#nA+s@M^2y@j zape_CtVFC_ z+&aI5Optxvh`WP20}_d--Bj$*2Ij_Ch`YlRDLBk28#-I%qR@{$H-skdV^}urLiF8z zsBLw?GMsJ7tj)zW^t}T!_f!|z;#T1M8I$`{8&SRSaGydp!LPoZN5T0vOlvy7acCf- zgn49ONT4p_1yR#|*#h4BVVR!-BxTv7iC|;3w^9*ytht&s?70rxT?)PBpX*gW;<2y zp5D3joN5(I*;iQ}pmfiNNI$F`?+fR{?3d!X)fQiM=YJG3(K4p(_jm*hub#l`Fz`CP zJ=9VFY6G5t-bmlsi;S+F04B=`7nsu52A*LrB0S3q^msX5(iI!V;vWDYg<++z%37Eu z6&(#+IzMn1q3c2LDn%|>Zl6l%aL;E?0Pvb3lJw4(XUoOu{r{5$bPi&F$zRN`!CVm__eF(Xu>tJiZ zREtN-9GD~Uuyj@y37sdyOI@bd3Xb%vf%v5Pl#`)-{@%Cn{QaKe_dosb@BYK*!T0~2 zzj}54k{zC}YU&^#W|{;ys=`G0yZ&tuvj zV99#)8{Pl^*~QuT{?E_w=jr~x_weXrj?P9XAJ?Uq;pIi|-{a-k*|TSOd@l3%PUrRs z1Uphl_<}Ch+CkNVe_|);E^yXPiq@sm=cxXnilKGmF456+MYIHhe*#UcD}vkI$?g|? z&{*FQ4pJ!|0mV~8crIQ!s=>vEo=$gl4v_0Jkqzp5eA|v9VG@6hf`dfqOTNv>x{7>B z7sd0bXMQ#E)((@ZBH<)GRw=d9=#fUS;S$uE4=G%f_x*Ji#NAmr0DZab|WIM$}iV*QK)1` zWaEqS0f@gUG$4!tKutbHOyGb3SF8G>*{@C!Sn8c)z4|Vb9!ye2Q1?U` zi~7pa?Ug=dJal=~ayi23=C@qgfm=(}TLU@}_r2kTr&dP=hcBbyl{WM(0Rv?XN8xKQ zxQv{usF3(^INT=ATMxt?Sbpf$4fO%2ig<IwDV;sr(T%1yus+{pK;fVy* zPl2R)O6Ay;i=P`3l(HVzuMg<}}0f|rV9npzp zKgz`-XERct2p`g3oyDJ`-K=+qvk-2-L>MJmxA4Z6sym6k@m>^ugAZwq*fYd#b@|5i zi}*AyHgC`Y8fX# zH?a5mgwz0VTwX+5roMF?bOg%9v}5F|uEsiEYbGG|6z$NWiDERcjo<21UlGIkxF#*# zOOHkpq9ZkFnpTtUgr+cXh#pjM$}~Ofj7V3yxJ%uM^t!l4Ww&h3Tc~H#k?cVKn#3S4+P`OQHc!a8rG|)x%5IvqD>crqoY9#%o1%mRs2ebN?@T=&Co+Gs%xMq1y#-O zVIn0(IgnG7%>l$b$LhDQ{mCQ$Weos3LjLO)|8;4pGLiqTpyD%*iq|$ zd11AC{jV%c*8jCUgX6!JN5_9%S?CP_J6NK~6pB@qAu0uJUF%A`xJ*+5T zKPwp}kPI4{tu(wE&s19EKTCSUCT3x|NcC49#W9Hz*I%3xETd@$ z8wCu|)U81(OdY*_w70we@U89L!;OM+g}1|rbQGo@ytQ)|2nMASt>74g98aDKQ%Qm} zL@Z1RN`oI0z^T36H+CrB9!%qdqr%kQ!Qp0il@$H9B*HsxQ>;t8*KsDoqH(Mq_Sm>IO0%;(!#Oi#FFCx7D1T!$M)# z-`HR?C%CIe$O9f~W~PY#tN|VwuC5Y^e_}J*3>lMP7B@!x9B^*r34s^U8#S|=bWt3~ zj{IT2D1z|PW;y*>8Q%*E1Sih1TV^eZpo`;3oRcWY6MU4s?M_%L!f=U8jxrB69cz~? zR}EW(xASM?gxP2cDJ__rgG?vfeq^yb8*J%jd7-j&^XB4Oe7gjih4T~8Q_yH|U;}E} zp=D|aRG@r_n!XSP>U#4Oot#fUmQ&(lDsm&X$R21(6R`ah)?FMp|O-seqRhBT#jmOVY68 zrkXc4_P{%%(*Da*ro~iXL1~7i@MOsaT8v->0@;OHV80Fx!d>YmneE0^#0=m}*CpK< zc2!jfUT+4M`Udh4Yg^kS#B5AIjtJI==p7iU98h>_{m6YOUMn%RznFRvNufN?frTM+ z3QF)IP$2Q4SabBY7bFBimK*`n2BV!@xUwV!lB)V0p$I)JWF-}K@x4Um)quQ@D*EQ|h6#l``VpFibOuFORuOaHH z?4MDwAXD<<07s3a?G$*6la-|zfu@*dD+3|%H4q#9U?f@w^;Y(ju6Vv?$!DJJ+}ka} z7K#cD!CVzy#@`@e)xzkd(WwTu8NFdI7AqV3o@>SLD@*jwU=PF2Qp{^UTOdLMSxQh# z>1L^JfZz+{7`_zdMCYTLu}I`Ab~hI*GgOQmn4zVeuPpU1Y-I@xdkb*fRn}}$8?sDM z?m61<;xT#wfbGRwD>G5KV(*U8f(^jY-FUokQHov)MRc$ST!dsh=OkM~_g^>II}v{f z#n6TTgHm`m;y_FgYYhCXEFH>T6efzZ5wy%k(4q$DApJoKgA)(AEy|k|B|9KHK`h5h zz;iIoaxi>z=mEbHYT|Ca#h_CRH9c0d<td&t5HJ9OcE z&Z|W>r00)>LwpY=9DqdQk*-72Ae(j@N5pCpKdeO=HWpVG7Vg`33+fsjFpE_>@FFk4 z{{f24Mv~GzBL=-^-w}jZZ4vR#66&HPW>ra6C12ysVXQey*@qOM4v|QKMLZT9JE4-Ian>ELI$Kb^v51VkbW;l~$AS)(Zbn2j zVN7e-!&M>RqQJr38y%Q*K$(6ZDO7Y zoeBlEIE}`ej;7uz4wI=yOG&!kE!ac?NGvI#xTSs+63^x)h&*4du=1RX8_$urK=bsg z;K!de{(IMLSTL<|q%^9hgnJNt5Ev4Bmvs*NHx5u}!Gu8!_uuHm?uF#8C=rYo^^ktQ z#0sUjih_dNuKpDuXMY&68$S>7!sL0jo-yP<{W7v2J|pD6rPb9Q`EOx)c_RN^$8-Ji zpFWZOCbHl2Ec@vbxo;x(P2|3b+&7W?CUW1`E%%MX{|C*l)c$v|vebS5x4gJIx&L!5 z&lvoF^n!Crl?Gxd0AI&o{9A&xAIq}$%A|mieDqVvOlGxg>$WP(%3@|Tc^j{~e70~y zHnJg=wxS_XYH97_x4~V@SV12vvDR+?j!Zpm7JXxJ4})<$Ciq|sP7PobGV*F)2X{7x zoz8V~a9^L1OH$rHWh!D=kR&7aj){W$t9{1c|00$b185ak`iW~xopy&Gu8z&4~*JT^8g609EsGVh7MG_eMeYeaE7bl3N1Ds7i(ZpW3devwGlh zEx5#l2s_~nkM0lPNd)en8--N0B$!Fn*@@ufHty*T3TPNvGWs30V@A4on3*d? z=GpXzmf;3V5J-BKRI%cmA|?lsE|e|?Z7}49#6_W6omirzsCg!ohOxF^6I!>;{mrd| z{q4;{Y@!bhUSo<@Q^PNDvg`vMut;UH31Sg!)o8H;9~8Y1XUj;#=&dh0%(`)C+l-HTp)_Adunr)cV7SP9b)`!xAhE%PU+501tag zy%`0h-1tv`QurGH7x~yg1VkHKZ|7f(CTl!eT^HVx`)=a4TQt>s3Q9|U`L4}%l^D;1 z)aF6Ql63c{XG%u!eKrfa_Sapm43OA7l{5(8BD;U72}0pTDJq?isQ-to7I_+!Zc(>v z+c#7H>u2jFB%pUDGQ_}VIRAfX*AMgz=l{zKmBnuT@5183#Q(#!JeSb_enY%L935}I zx>MP`|7x5hcS7RD#&;Gm@eT1@o0CYnV4(Ito@N(ARQ|EfOQM#EhDW_fwQ!WVC?um_tv!;e{>CeIIvAsO~3yXv(`U zC4Egyq-gQ3G2ioB^onF7(3^Pf!Di)r5CnB@Dy2M36ob)DSQ2`rNRnp0Zk(bun4C@i zX+24cerRX5S+{_Mo?7RYp@p93a4k;MO%wLM_*E99S#Dc1EuUj;2hiYv>22MHo!+sS zbmh*~T1~g6zIq(@90cY*S|YXlcuS=qsV)P)EVK;|1bPuDG*y~!*B?H?l!nXprYrB;mZ=^n^$V&I zsvW}LsqNE@iTY34NRC0%=Y{Y6c|s32bl0^4K2PzPk;6G_*uV^7cd;DP1C+yi-GlaH z5lXZ{E5LZn+!K|x8m1OkCJI3^6F3j?|u)~DP+=YG`+f{t&;sp=q9mlkRBshyqGQmP^R&l7QW>!@&K zj_%fR7&+sxieLuesz0+~m7GBqD})&!;@?`SrAol4C)VNu1c?H=rNQDi?3!&v^MkY5 zM19AZ6&l649^SnWU1v@4Mp&1WI-B*NJ0(7p*YIANW|$-`p*atI=*~`d^MVqpf_2;q z;NNBofOwQV;7_CGcX4WCw+04JG^RU`qzR6%TUlF&I1<{IUKEL{1&v43pRwCaxH?~1 zQW}3AW3nf+)ZGrLJ=KyXY4e?Q>xc>t>YwV;Di`LJ0{VZACQ1Lqh;(0B4{=R&^bTz0 zP6ve0u#wvDqHjcE#a0#Q2JCIJ9sM?VO=b~)G}j7IV2NIZsIS$5?+jo8%C9xs7t2$~ zOBx;*Sw(IIZIDjH&T?jlMgwIBwNBK*aU-z(P=LcmZnP{qy5e+^Rm}`k8S+_S%NKcl zqiVwr1%+dsP2HDAUaZ=Qy6M)q?5bLjgp@VXmMiuy0hQW9t0w*jl>}WVbw>rU!l51Bo7(>oQJJiiq{d}O%49GQ z^yeRji!KpsmT89|QYz_y&w#h<0%If%3w#MWrfx}L zP~&JrR)<#BIQ>Yq&%((FJEiYKZ+tw*fr8vnGxadVHUY5NYWm8e;m{^zpJTkEqM1)8H8`Bh4FgL# z+S#LMF}&sDic3vaOB}lS9l zhf7#ay(qzOY#6o_Y-raZw`)XmRg%r2S$fCz0(0x-H+FpPw#)dtOvBY>6|aIz-;Oo3Q=7qzC>``x-uomh?jjE`Mu@sJ!SOxVGA|tSH zTB4NJgSom{)!;ud_TA*g>YmLtUkB2V8n_O~gzlo|cl40^wz4F}o{bof_XgO1qOBpd z#DEiu_H&S9@oW}^qZ)1u4u)~J-UlM60-Pax3-w zXdaNcwh4sF4bwP4%>b`2o`~5@^9V#y4zehq0lENE=?rHPv8E5UK{4ZjNLnx>LF@|~ zLO*E%ieO9DA9bWUKD9b}LDPobs<=RU3&5R4ZYp9L8?@XLDC-0;<#L_2hv!<;IO6`# zWnKT$GwS}&(rS17_sT+fb)x^fj^}Cf|2x9k?{as+Cq{5rVFZ`THu0MKP4}Mka#o8H zbyFDVQ%Tr^>>V8Jzq)z2_1eUX(!`6>#Ea6zNMT~6@C|#$JOB4R9_F_J7;*kzUhF;p zUoDp>{Qq@4sC^zV$jE8nx9FIik(NABNB~jDEQ(WK0skB{yU}qB{!m+Eg|HNC7 zlo@!~s^TU;TX2BBXsG-mr7}nAALzD;0~IDOo?nFeC5Fvy{Iz*)iDx(c5Y5Fndy3hzlmJ)qTc|xIfp{^)y z7e;pPw3`txGbl5rjzf0 zVU2^ri^3{%?DAp|F=&Lbz^xBy7oFf_XcU$fAB&Awo(e+k+HpCV%V07(Qz6>gI*}QoYENz)HH!A z;Azl!xwH`G70l`3*`0Q?qK#9o>DDx)nTBpOtRhm~U})Fm@rJ3L>2|1jE=++GvX2`U zFiH_-nW5ty#i|t{)|7&?(_ynfr8_eLa#!vtB-k!2UvZTO=o=J8e3de}SfG<7RoKv7 zR#IjautMC6g;v@G_$jICi^|Z_M-V=3U9Oj&Zbp5?^@^OHW&jK4#^@W6JOF2oDJWoS zPD^rB1$4InO~Co0*^!sRP(-u3dN2Qq6KNfWm6vFcQDfW|3g|eA>N-p$@g~}d0aqQ^ z!u~7(UfZknbciH*Jkuq@i~0dz)4Zh_b=g&U|d{M18eQ+h{pn ziwg@Yn{1XmW{@1lna-+#cWTL@gpJN~+EjB?OcgSoa^+0TcI(A%?8I$1OHs=c>g#xQ zJUN#rvXX;r-mo0!JMqY(UV_f;aq>`C*c-<&fg1$XZ>MO5UOSAl#COvQHx4a2lX>HK zV+90{XiEP@9?rz^d~`#QrjnF&lpVPS0991Y^}iQczU4;!NFUdv^T|_uF~K1JfQyql zZ=5u2JdN&<2a8fs{nQ@_1aoY(%rD>iXT=+zfd3J#z^;T&oGE%Y6Lx?`sXwfGHf45U zCfQ~8#k{@`CDuW3(*B1vz|HPZm_#(76Czt(BLS7H>h3xA9q9U0Yi#DBBfQ!Ke*hU?wz;YX08MwSxS) zR!|D34#tKtEc($OOsu z6&@3ylNYkCq`O8y3nHT&RvJ>wl)Aa3u}LN#z%-)tB}@VWGRg*mSw&-rj@TwQT?5TF z;IEu}$AJ!jKva3Wqu|aFS;$2{Qi-vlYWyosE*5cIqcbMfbi?Skxadv0>xpUkP%f6|_Op8LJ927BE}oQ1QF#ql#PgOgeSXf&P9397qf(glisJ$!#$Kw5qvO#rY+qHPfm zph|?0Si-)eOUau961qQEb>p<<_huL0yT1}w-J6*{cYlQcdgNgBJ1d~N5%&Ja5=SSH zVud>1c`QrZ2)@sNWlHRUv@u}vGC!K*2rY>mRX{zzI%F zDp+8$npV36Jc4U_Xqkp=D_%-~`99AY7MeX1yLsw*=71Ghic}AjiD^x?va%w|mBkvY z%x-0eZYkimM}cEswGVXk#b*0J%0dg48gUMEN~%T18AYJ&0;|Ud+XrhXW5{E!mWw^7 z6$vs49mSqSvg#{OzY_Lqe1_|PFCF@eo{{z+%iZ=LS(p*Gx&Z%;ejNY4cq(PRZ&(aIF=Hn3;4>f(jv&?`K1o^~9gzyE$-SvKoC>_uIMX~e zT#6j{D05=(CSzuyS557ZY2Rhq8(lGLv}4F58LNu~P@r1#fy0BLSISGat&LQ?mgKvd zJK?F)xs&f*ZKY~y1R``ROk1DD6L+}_1rcTYy5*&3?HM8e`@UoAu3?ofQwIw9tINxS z#v+QoycTmqfjm`6qw~29=fI6C_FsAr`;;Na%XCt$T4yn>$oA_nSM-r>3WIY@H4vo zwq5Dtn|OE;d9cxL&P2TSdL7+yB%Jp;()>FZM+`{+IvD}QSxc$B>mFCYWc(DX7S>B~&(=$F`cBw~?q@jtw=Ns{nVu2!e|cf0JO1;+Qe|TQb1ly| zJN`4p1yP+yOaekbw*jHk6Juk%iGieShe#P#(B-*=<(?Xui;bIlMP-hjG6TkA5o z%Ia#D|DW>8!qUn_{=1H6ZGHWPDRz@>0TB!AdLv}B#vFUCrJq?gJGP95>*0-Ci$jj$ zJlhM+BC9NvZ)xz)Z4AWXFaqOfe~!28%_0^jr&V;8XR?-SS|W_g{g$JB+-HT&BlucicQ=oAkLKB%yT`8`JUnKQ`*3srcz5TB9o&O_Z?o5T_qXTS z4y5lKvYodc9PS)J+9B4ld;h`S?hd5x?r-fq+}_=PmEDCh_79HP-tPU~W2o%-0ABaC z-Tixqki2t$Xa9Jf-QNKz18Uj4ySul0{5F)v?(H74d+>LYJ=i=v-rah*w@FnzczF2W z;An@Cb!1sRSR_*c@@8RLfI^2;&dpZX@Pak=sL?VSEw^LS^dXagHJBQe1#RJ$wy=y} zw=EHd0fuP}IX{d5gd>OJ0kfgns@3364K_k?WA_E%?_Z!RgXn=^Y6`DxYt~ehA(~Yu zEe_lH?A+92+M5hLWb5l}=iuJdLrhqUXWu(o<6ZbCWXHhx;xC^)5KI=nwAmYi)54d4 z9q#PyY##043x^lL%Q5uLSfhjzS zV;rOaJ@f#B*MW%+(>nQiBC;qScwoTtXO}->_(?kmk z@;Eb#3$bdEEhSI`afukj4K(ZHLI}_rOnrF6JEIxdupFN?F_|g4||t= z_+fXVjAzp~O?7X~-hCNm(wNf%{`KDOt0(t%_jaHWkGGJ+zK}+;C0R%*nl!{T7GhY5 zV+2b|xk#)k6N4zD;ju!?mBu}I?FcVdhZczQFdl0xYOTTmlGCuVupAX(c%&$^k<=%@ zNH{6CDCzQxOqa7rNta*ZbeKM6CHd`#_fO~}WDr9q#uUcRZ=pj37)N1>a@Ii4BXui; zb;(&_&0lM;1#5gQTx%52D2XzeUc#T_3@%JVN&$Txsgul~OTDH$e(>OU^YGO|D#yz& zr(WB=@CjnZfDd}%6U2=H&-=kk#EtxP_3t|ew91)>82FCw(K33-p`UpEQw z{?JX{B~53RS+}A936kb_PvVF|MfD@G*}xCcfL-)Z8>N>C#^v%(I@L=q(E0|eK}wO7 zu4L}b3RI;V8Az!W{Zx!@m1qkW3ny(oI6(>>Q*F`Nx26?JSHPoy!dnHV=}fCZ$5Uxt zJs&_TUycYI{S~tudLRkf=HV`|O&f(Hism6c-hH^cw~a&!*tZ7{k55oEE}$1INUWBcx_19F&EAz1GKy?A>-o@BNtSqE2|o?L3_J9i%rYDf2Mok|8k za}k3v+3rTNOgKS36rw2FAGGPm(N>@(;9AeFb9B79zrA_5eS&i=TOpd+HjDAdMMIIH z95F$9i^1{APz+&gaH9bGSxQTWVtA2aIP(=eMvF6|QYm~8R`+*~clVEuvy>_+=clj6FC05vF zmem!krK?>)SHEhmaH(9)`nc*vaaAj!Yx+k!_B-qarkS`Y(Y}mZ68rYInJ^{*nK(&^ z@~3j6j#EGcO%QZzT}c84RSqv%(N7EIUf?7alx=YUU(&TZf;fYm_(sgA#PUso7m<== zd9bF49O4@*n8P-+nh zqN1Dq08(vK1_|}QJ^FvkZJ(ek5ihW=>KI^@{qM?Zm;HBnbz=W@O;0}kf2E?~KNJ1` z^Q-^w()w4lg+*=Q)>onRS13}V*JYpm@lRj;>^EQh<57>L0%R z)yJRz<*%Ro{eKc$lTZVY$Lq*p@tr%ufuY-S9AyhUpO&#^Pil@{7rK@6g+#;KH@)0T zw-ufN2(bz?SXG;9A9;jwJ=WHp7GO42YedFjd%dy~_}=s1W}V_uT;Un;2>QQRS?M|d zU0I!+|6a>8Iscu||EK2sSGrr47JBFoB;F80yw2@!%*;q8*Z26wY%KIh5vDLV7c24u z^xp5HJt}2>=R5CS^wYVM(j9W3zWqP2!jA7bK=u1*+Ob6Ylz!BkDDWK(-)fwE$!sjaJG#y`@n{qJ zgbITKo1R5e02MoPkk5_mkLh>IuLrtmb*lyLh<>04V%ml)cfMU#q{``6P&QrwcA#s& z#|l%B$?)SzSGgN$Fq>83SWf6D{*!Y0p_zhjQ6oWhjVNj{YJr&RMb9xw7t-zpOJ|4# z%kFHkkT`S!u@4zi^BG>!c&SvMfd!?mC~wq~f(kXE4A7b)+yFzIH!m(itrucS7-XN|#LPfhR4jU0S^E4nv0BwzQP>3%nxpVJ%e zlk3XQ_;uyUHRY?lrksH^MU@S|*{sE2eXcn7_qdzkjOK+Z6^~ScodhhnbMPsGZzNhckdHby^)hJJ%t9k~lf8`qE zrAID<{=d9jUPS$0xiazpdM(d5<1Zrc70;VF{QwT7|K*kC)k?Sir&3-iPw4-3JmdO* zePR1x3vbL(5N<_-tHEg(MpQvveNePHrv7+bY;9$+Sx~gj2QwdnxQ!ZMbQhn z9tB~z`K2%{ZNHW4h<#W&Fekt<1-uM{ACb?SIrb z+1fAM`SZ^|dh*x5eDZJKfAYzHPGvU}0~NJ&Gbx=lEL0~6qa(+z26}+TP}}{5Kl{yRpZ?_Y|MAh2KYR+!{ruCPKKb-#Xy*8v zzj^ZMCtv*HBef@=|MJIA{{H_w`Q)!f>XT1?_y4~CANyBH+JHM@(6TUHyot0H1@Y!~ z)v@l>P>Zl$Qa_1I()1oL@5df%<+s54K=^MhH1Yl?Ui>fIq2TQrV2eisndBa;fa)XL zujGU^G!TUIR%~>F7T37Woty<&l^O@hw4S#CmQ$lxO_v1+9h#lH)pZ`i+9FNzy9KEcdfo`-yO~$m!uV~8-DGU^v^&q=)%MPqF-Eqw9tXz#( zG-83XgW|rA5!E$Z3z#!U8DyK2Z=e)d%{mVQ{Zb_~DL{J;URbeHijStQrWDOEaYE!Q zOjt@>QA?Vh*>bGxV`OuK+ZtNA*!U&qOmo`JN_IZM)Xiodso!a4Uq;9ffkc#jM{TyU zljZZg6h?1_4Q@G>A>vHy*{9a2*=qV)ynE`V*>8$v*@;nb?B0Lx(zlVj?vwxd>F0m@ zPXiCmjvI=nYiSuseA9sQuj@XHGID4;vX2;Q@UyE$jO?4fZ)ewL8UbFquV$ag$$3~V zolW+=IXg+fTi4m?B`{8*9_9cHKB(#rhQ!TIyF6Huxhi$ISIZ%Ug*i9;NC%xAkn4t# zed&DA0<>g?imeW!;P00xfdb!$xeMYgGy9t49W-3c!OKNTYc$Etz7gu#sT9U*&n}9> z4AR6A7t-+Y;N^Buz}>1rd#7XJ-jNj=%?C2VWRbxVpo|h&3l1%>tOV41|N7|;qE z2$m75?za4TRz!}^M8+UZ-F6H;D-L0@X?S@pD=soHtO<9+yKarW)lOO%>FaGf_he%E~XVjqR$_r<*>6}F^ zLkq(*J8UrBRYOUrf)=XtCm;Xt^S}A0&p!PT z^yJUq|HYSo`mtIrd-B`A`tt97_{A?i`tpyz`|J<@SM)J?{rHE&#J($3#SRy~7ans3ErK+ekEj{>$G#`O^;uBKW8Y%K^A}=6jr) zn_427ar^n-e*eioekP`b!s|B+R6dO`B@Gy4_MAlergPB%ka78*0Uc7Ws^u%NOTNp=Q%YC{OqJP zvfCDz(n39`TX_a3-?=?+=%#meT?$IlGiFy8w%i=}Nc4r7LECmS_px&BGrmqM``kH$ zsq!@IxyR)UVm-pXFzyi2R90PB8aQ$rn}rO=MI{HaSrx8sEjGOsqDwY#VdEm39)J+h z%36eA;BzVKU;)>79;KF`aKJ=1(G7c6VBQ#$Kq(+-zL2$d^~IAso#PfT5O&zn##e|Z z`lj@N)-4d*?J*ZcPa&BspAzV<4XD`<0a+w+8Fy3!IYYffw|Fi?eX;E*1KovvU+&;R|`U;gtCzWm*Peez#E{_;;h{qk2I4>#qz^XkK0VID}j6EkUp za?zF=_Z@|Ohnxxtji^FJ+}U8q~ay?aKUHZE)fu&DrDbh zH7^k!XfS zxeO6VqJI1^zhBgmPZnNEdE+GDpeC|CyA@|u_HRN0$>cByl^kHm_%75$|JG}ot z6>=zn5DK;`C616!AH@+65JYj|?Ap?D_gX-;w-rs50~^5)!Jm$25f&(sVWjJ znXu@jTimTWli+riA_WEjZJ#@oITad*vFf0jYHG+49ygrYfH2$pD6+=D$(AA44?xj8 zu)-AxQ-k#7mhX+vE`rRwdMS8vJ2>~aw~!whJ5boB6vp>$Qx3y#Mq#8d27iqn-A0FC z6hOX*s}6_bVZ#<*WnG@8kU_JDu?5!l0$T-)uY$qDH6tFKAsCd|O1Vn~Ff{?MMJv;) z2DWl?D|AyqKF(4_;Qm3l&(EtdN#o|T#+9XD<CKGXQ_SB4)6QvbqpqJYFh4z~rWl57oZ<-?g;&GvWg%%W-#|!N#F zfQ}qb#fY4tWjeuzsan2`eQ9b3X~>@xAx|0NY`a2~M9sAgO`Y`1LQ|8`jp(Q7)(x3y zyB~d#kRZJhHHe(1ZoMnE<)J>NTchG*vbhO`4o zRwf4lNqJ#f~yt3&-6Qqo;t2e+%w zqubTr;qC78@OJlgc*Ff2-EdzA_jZ2=_jX?fcZ}Q~%GpP0)-_C1JovM%o0@?;bRl$j z^_(oD?6C=c+ZHtD@v!Mw592YZYpunzW+~81=vB+>PJ8uvedR6-LhR;CYZ>=ev1d(T zGAlVfS{2K#=}_);gJt62;UnXt%HC7}EXVvZqI867m(WhEdx~9F7_^-^tB^0EDH|Uv zKCAWRGtJfW&DE>H@^a|0g7Df6V|#rLs%}$~H7TK~rsKTuPDOUWGyND~HCAYZ&@4C- zeFIKh)V%@kq?BDlw={Au97?{>TlUDt?WbgV>dSv$|Kc8*p61;j))vpzmtj&Gb3X@H zF9(kx7@Ap`xFU34AMPq5CjrM8R*@%;BpT83=Xa!ur%;u1J4z=KOT}PDS-rC1mlQzX zieq!c=_&IUOeUgluGxQB-)vXrk9b66T4a4qCO4&g1LU#K!(;VVx!!WIY(9GYLFcWCUxNd4vAy$g-w+4xQTMyGfX0Kbe<_|KKQP_`cw1n z^~NWQJ+qNQm6aV$$blprR&*MPhAXYI5+&%1M{F$daU&dH1h%s^d}}Vk8q&ETsq?_J zrRS{FywWyB(*%56JXy2J$fphNM4?<6z$tDJ$mea1`{`s1;h@5%>P(h!r|qYQ z5xay-DijctCR9r$Bj-sUO3VU+N*83Z_rfM(z+{bE_k+8?1~0#AuFf^TeacKHEdHm5 zJnev1mKbv=9G&fZVDLd6(V?njAFQ~@sTw6@0-zbTP3eeMHokD^f4$l=^gc=2er1Nr zK*J>R7MD64!9@7RAg4gfC?bfRZe^FT_>MpVMvAC={>2{)cG;uCQlsflWcGnmLXi!; zQZjvT43b~B5ymhyB~q8Ch`P<9G);S&!ckZyasdn-3Osq*(7b9KwCQ8$?CAdSy%e2M zQ`ivqk%rq8MI%Bul7yv}4rcv}dux}!Z+vzU z{#*DC@F1f>asfmBUK=U--#1(xzdHb@(}8dmLRkeP4#^-lRHMdfZ>Tdy&s5WvK6hsI zxwA)~VwOiXQ@W?37Q1gdAF)QF#^L(PjkU9XYreeBWgi{|yyk66sfs+d@}>+;w<%yL zc{{5Fix!6>LS`5EF?e!q{oE4anSY!)yLR?c@bG^CEn@Mb^{=kiU))(+T4EfvHH^fW z6IFEWX}r-Z6VK7U=sy4SG=99gwm8?rL8BZXyjiwqlxe-F#Dfr=g>)aOr*5`X-T1j_ zD62zu5&-{b|JMIaZYmS;&7L2cwhw-J9$bBv`GsklaIcF6>QS;ey@xzy6eibk4XlTF ztjzyLS4m{Dh{hw~KFNGcd?W?f5^79fZvoyFI$*Y=Zx#R8#`xoWnve-7Y%0@EHweW; za8oI;n`zt{p5Wexi%j)oSTLDPkw(Lbcq2Jv(&2^5v&5{20lp6xgL{`_MVJkUP3smg zKWq%lmI~+=O*^bko1GvYgm_124!xxuKRk9q8KH%oj3O8XW_e`xi~D4v z7;SLjMX>Y>nX&AorgZNLAkw+079PNiD4~#|e3L6tZZ$;(H&bIwIRT~FtiJk5b9J%t z@hjFP^Yhi0pRBz)+gx02%zd_Y=0b4wDQmp;^bu=7(@fwcx!kwE>-j8|+dr8X9X{lZ zEXFvYd|+6bJsk=cSssbH!Af$>{rx$neenHdp42;S1_$-Y?8eGH3(BOvMBruhCJ?%m z)kWu!qwY&-hUgnPK>^^DzT#hZ>&;$_H7AQVjgtgg^&tmY<%wotdhd` zu?Yo+DV;6Kf|la*ZXCC?e&I^<HQxj$+$s~Hq^qb@ zq5#nwW}V$v_J;R4N^7h(9(>fe_tV$II2@Dr$g8GdWa=#~H&yasy?Y&dj8>z|(wF5M62o~5(5w~7wkulmf=$>04cD7#rH zdbjQ}+XaPv<*GvT?JQ>W9{rXzCUoWgA;5eIaL`fhN9n6aqpQ^y- zcrGe)*IsBL6exz9!m<8mWbQEVRK_V z;6!bSvfri@!Ec9V70dRNqOMFM%hRE*wt{VdEc09)0fL{d#p|VOF#c=hTM)ASl8_>E z>!gjkt+OeGQ%-HG+;U4ZP{p$8AtO{=sq{)*aHql8nxt)?MzG zN=sYvTAWeNsgNq8=#=H&D@y|xT415iDneUnTVvr}Wq%rozPEFQx~Lf9d*(7bs)Kw4 z#1yRsYaW88K>4MyBu3FiuAxUY0%)uDA_3wnt?|j@wJX;`?+e4kPr1iI3BG?Zc=$tb z^-@?eVCB=Ta()C$Us$9<4qd10>N-vDmPB1AQ!<=`Ruvp= zGjI>*p`OY?J5zq^O|63Dd(dQMNuM^4T=JjL6BR~wc>^`B*2+3Lok(_3(=k#>KL-!x z?%=rW9*AXyt3x!u%$XBXm0iQ~GMp+Ca1RtyZcj?%<4=Pt&w6`LlGCUYJ%gf8n>K{x z(`$gq;F3$OUb8)&U6b~70^H!jcfrClHo(Th3N7fhKs4d#N@yUiFF#>dwzg-?nf0pV zq&}?|H%uD6qkI5&GQR#kS_&&{2qBZHgGUq(CR-6J>bCjv`uc+((_g|i`J(y=#wnSD}x*UZe4*ymzdz?j2TWRD92T@8|Pe8m1O#gr$Z2e&|*s0ZQbCsDTH_Vi(D>!99($ZIMXY$JnlFN=VnDd;2NwK!gknGrT`H( z-0`I&yqD%1H-CU3-Ix!qKCQocu>SY?wWnuk<&KuoZjF^vt)UVTDZ)GmKoyu9<07F$ zhStGHDaJ#f?W&GzYkq0Nz8L0egm)E&2b2}?&z^~ucq@-{L2yeqo9LEHTdbI(e@u=|UXt!Pjs%WCR!D>%EVh z_b&z)vo$)%FpHi-L?QXrG$q9zdlHdtYhQ0JFn!u8T#~UQOOSZtaY#k+lDj3x5I@(H zTnJw%ikp|ag%0;JZWn#==kYpiTR_xIak(NEA(JL_KP)1X#U+RyE^V^3r5t zGFAm*Ez_Gs$&hnKeCU(++k{;L`JznFd_zOxQo?g}@oxe% zs4~i^bET8mJROOCLf;~*Qj`W4WeRu$oSr&e6)uK8T{VP(t%#zniH>ik zj5WU|`Z2gaUn(@LhE#p3CgR&q6^azgwMYn0cgm9OwdZ4U^cS5k3t61|Zn9RaiilQ{ zJgO!vpB%#~iw@5*XKS|4o0k)lc_l}Jp#Wi1x2m8_ii(`+N~dsgp>rj3Ds;BJv7lF8 z%Uc+_+9SHQD}G;u+LzemlB}_9aXt)OV}95uy?|m+G1q8ee4m1=$kka0;Rf8uDBTQV z>dQt+DvPGMdOpsgY21DqTszeDKY=-(K8Vdv&kz$s;7@JCputoo4n;~tY{TT?a8 zvs#LZD1#ok=?EY!HA7S zt$KfL7M8_e!FolK4Zc>xdu|b!y)TGNz_eb>NbzQoT_5O0etZ%Zw#CA=@>W!$PkyZh zmFmkEo2x$n*5H;vC27fks_8YF*)N#Xzj3~204ch4qTAq*IOh3;()|0a;Of`x17=Qe zJI+!;HXN|^d0fGNude`4#hj5$NyuMqexOYBSU1>|S>{-6vz>bM#Pui}gyMKIp2WiuCCAA5( zNHltdd|ISM$juQ0M0eU-woFP^qxNjsmUiJk6COy_MSROjOR}4 z-M~~wTHbVHp6zomvmzsF7WKymK-o-<$UfH`LMcojB_z zd-WFmN`;mx%4*VvC!M*(Te5tzT2Z&1TB31RnPURw2RzbQ4LVj@%4(dh36a&N4J|pd zSsEC(%lc>o`RlbvLKi~jhfPCyWPaCFV0~trIN~kWQVS2|8|3f)_b2F{C_35HeX*|CA&0u zms$qZi+|n{=AW=^kl5!>c_5M*s1dnWBce2Qa|7ZiYod%XgCdvi1V&qCLhO z$s2^5v~7xxFr<@&sdCb}u8XCQ8)bD{^{w{NN0%~5W}T{Tr3vVTtmXhRr`r$< zrmI!mbW()rTfm!HUBn^KDcbm2Cef@{ZKa?WSo3!VQ*%nRWV_~&U*6#VvGp37)ZIa{ zKG-iTk!{elZ6X}qQuWPUgV6@P9qtMA9sTSeKX2~Z1%D3@?P&R%{_Nbd=Z&FVyN7r0 z-m`P(@SZnz3=hA#WA_`%4vA+8|Mk+v4!JhlZMQO*WZn!9Z{M*~J#?%vsFRIz7R(i`EHm&g zVaF4DNB+F`;Ar9Gp|QfTlLy8QjnYDi?JQ=2YGH0CdrnMwbYh$m#qC|E2BNK{(Ztas z`;U(t17}P)w)ocjqely4M-IO`KnI(2J9=nzZ-I=0jDA35rTpLg;aUH>R?$x;GbH?s z?(2VO_s-pKwypo2Lp%5U|N4I&KkxjB%qXB2V4^v^J213;$AF?+B^w-j?+zS4c0he= z;7??0`PcnNMvnbuVwCyWq*p0D_ z+jkzASl1G|NtJ_aD*x^wASf$$Ott zpdEH%KP5$Fi&SpY6sEH_>xS*)!=p*~lX8}qyALNjSJ%h)m1D|?mT>MB+6+m{sZBVp zZ$lkYe5Nkg=K0wZ9*Pf2fNnvHhJZX~jt}G@@le?TKIhii)r9gaF8<9_Z4+7>G1PAg(wJSt8b4LtP(>``Gflj4c=fF#5s$<|0IY2Hyx41S7;IC@@ryMb@{wzKG1 z#Po1aoeE+@y5z3Nt{A4io&uSaQ!WToQ--6~mC50#%$Fg~O4t_@U_x{Vu+Zby5`8w7 zW6O#}<@zLLJ{epVU>O;PiJB|%$Ou2R3P)$q>n~*{aL!I?AVi9K8P#HTSdoRS3=`vu zWK9FnC=?VE0-n&IdUb}ej0R{ZWLjp&iTD^u>XN>c;yc{QX}5&~R{#R&p#^}eK;q>f<>$1L|1}9MMG@*xqLk@thiv6Qc_Dyg;=b+`z$Gof4CdC zPT<6NcF0Ufc9MZb$F|Q9J-7glteZZ%Ges;xGeIbf^5kQ)R}%t)_#l{Iv0aGIryj#H z1XLy(DtanVtWYqNPXW36iR_$h(j+y4MkrA9QLqWl%wbD!14`F-qdX7C_ArdadI*Nm zDC?(`8s6j$X>t25IuoNnl3K?)C-9$GfoK^YekjhTJV`1V!9#=qV<{3a*^1zgAN7+S zRll1aIPl~5{U1K)-n!rWaB?kyQ(6<12msGAge8{~e8OSrS^b;K-7DXA-*|%V(t3na zfSJ%UH*C7CP{sfMp^7jDOv?*Xd!rVE5ojESyDE>v)%%mPvYyKaUs0_dh9MB&kkfF~ zLpAAoJ_Y;)fr%T%=IE*GaW^a_Fyf!&XVUra;(>i<_w9LlCeMIV-u-*`PK^JMKf~w0 zbNlwg`S0GDJblW~Kl%CZl=g3n9aht=`HX4tKl}I0jhz2OOwiW(|Ks@i<>2gp;EpqP z?cA|*_qJc=gazQ(3gbL>6wdWyU;TZXyyqn$7ri5=PaYpSQ8$1kh-H_v6c1_4WVguQ zpH4NI#XNYrje{<5v`JW#$09LcBOvejt+Uh!fn;1RK4F@OZSDLQrnz9rfA}nVHWl(; zi`gB|K9!263dLawOr>20dS;HkA@!vi@=1m|4v~vn0R$TP3t`}F%l~2=6r4RhFLz^Z zi*flxE?!D3`Tro4oAd$*ntLG>rX4QME$=wR;zZ>b8Q~oM5BH?{}X>)Rq zH@5v7tft%4x$6$T@4&uou4Qd=?Z!43tJ{9%1U3Lek!*ug)?L7%U}iR}F{iIjY5ytX zzedzg@w4Ih-?eAY-u2^u|GwQ@P!##58(Yx5vH-_%!CUeqd@rKV(B@;fJB2T zK(UEa3;UWt2ucMHiXRXK48nn^c(19B4(h_?$CrPnN?D8;wf-y6UQ%leyFRsawbvF_ z5@oJong}`Em>e!txcuPEs!_s_@ftN}fwG5=Zg_2O*C_c&E;ycn>r`8>S2wcRtWlxa zRiy~%_*UvViPvb>=y8EpqnvksVn-H`ibfrDO7C>_N4s}n4+TSh8lf=h1?q$lq&~9} z>afU5!I0rGwS26uR7M7q$Kv43n~H~wY93JG;=IQbGB~SDLqjLz6>G7cnX`C-2%JAc zEle&AV?|L%HA&@MSz}lC#nqsolesuS|YpH}a`Sk;ozCJMmn70eMiC z;)R6!tUYPLa5*;5kYdkzUPshe$!KLou!8#4o8ruqp$R~s42dD0w zC3;bK)QR3_F=sY)n)jn7wVOlXKoO94-+|MizOqW6pzk0f7EyO_iZ8a2Hcfmwlwi`> z1G+*du&GOf0H+}p3uFp%c&ND{^HfqTzy`IuCDg?T$Oum!Idqt6I_5;ZssV|`*FBa* zY)o)0CWMOx%nGGi;|nSs%&rmnRCLb+Z!IbQY5sUx=4OLWQa6`{i$lO;Nr6XxUt; z9>O{7YoU~-7cGu|7OLoGd1b6zmTVR|XGPAEs@_YeW8Q{BhUQ>7W41jm4jZ#HYU;1y z1@VyjUB${PGpk&`Re8Q}L2Xr@A6YDa#+B#Wh;*tU8_)fj7p%ury)D6>RGs_HkfvK+ zM`=0ZzQ+TCd6pk;q|&6vufkQc;mVlU!GDt?N!^46q#AyZl>&4+YT@=A&0~Z^M@>S4 zstT_`Vn}sit)fwuIMu3nj@YEsE|VUMrK%-$iyU64 zY2r&WjlvdCnQNqgK;kZ%9{{uaD%BXSN;frtq=B3cu^7>y5GDYvvDs;%bFNiYFDxdE zZLEHB6G|v*U-|QuQfPToV4Mx*!p>?*0U}{6l>5wd7JS-s1FFKR?;|M53gp;Y<(O?a zd|_)O=U{;7nSk%Z|e63r|uv3v+%&=2oTg=u#g7Lh6rvPGm?Rmf%}QpGqD##C<}TLs%VlHZ_s5>6E+knv*05LR8ZdhMH6*6zLA z{o@;J58qn*^o@zUT**7qZFpTbGTm*|lcnvDEb)2@V2R6(Uql65`dK% zVaq-p&%qmou0?R>Se9x1`qwnq5j7dnNfKv~5N1qpAixQ1Sw#9Qv8o-rSOyYSb%Rsb-Mra^7)K;5r>jB2 zVBopZ7?4X9Hekv{M@a5Lf6Skvpp|(I z9UK2_!CmZE)f`=Bi@PmP{z12<@=_$|$fgD6xiLqZR5^^6rq*B$JjiOr)zh6yK>V%SjPdF}nsK5Mguvtj{FGC$}vrm#_ou46?Y{3)eY zt-h$1_Mnk3l|^_mhM;mAI;KCM40+j1Cipr>jClR)oX-<>d-G`&$@#p>9`o9r?)C5b z58m#t-0Hn^ulL5p2$a!G$;Wm89YxsL<#=d2{!E;9%&wX}Q7ky|1#tn10spDoBG&94 zff$U2ksfkl-Z%lxKc8Km+ARRled`bX+u!tV{h|B%r`-?lY#f=CshLG6G0zJ-!dMDZ zBMFT-4Gd<0NcAwSqwz0?j-5F2uRw7N!AN>Q6Fd?3z8J(3K{(QtOKW$RdoSPV-n!HO zcBQ}a=hfxcwd2GX^G;faDLcuZI3>6+F7fLjKuicFubL@YS`5`Px)j(A)3d9t-vvAk z8euw4U)+Qi%SBQS^6Zpy{mhnKHx6glr*_=_&AZ(P?{@Eg*1P&$|1XmZdT4>#OC~2~ z$BlC?XW3zyk$EX~{FP%HjV1ZZfx4;-bBg0EV>5mCuidw-tLY#PsUeKOMnKW%UDG(#$_AEsyQkr&u3{L|PBfwHetz#;u2KFkgo<3EhtV*>v# zEs#YGRm$XIa#1(XxEZQxVPs(FUrs+;`TG6U2Y=e201}uinJ(IPiJic9ROtlpW9Qa% zc1TIJPo(jz&mMap{Mi5ez8suVF)&4xdINiVa~$s3&N;S_nu5vgPxkRqc0w8Nhe23N zh-```NdN=VX=y!JEJ#=k9ETJsZjhSI*m3ADGLS(2o`nSR$8f{Ym5WROgj7lo>s;GR z605#2rBWSf=R!a9S}f)?bSlk;ME;#Y3nc=G5EGK5h_&H2X23+dWvatgq8zCK2#OMV zlMC*dtg$2nxG@-6M39CeC8Hx|v$Rcv`!}hVcQHlRxaUQ*{<=&qfki2zFW-gPw^Bekd)apr(-6apmk?qi>*B#c}XD zuL2;}aYX172T8V|+HuHjvz<1HJ#|P7y^pLHgSCAo$)Y!un>HH6uhM3gNK6)^tb$Q^ zBMeas;V9mAtPuR63&b9hN#QO}7|M_x713m|sP!Q|i0>heRxLprSTzKM%_i_?){zj@ zg2TSH4m=b!KjHb5I#+4D++aHO-XY^KdY9FHZ$dCixm zG4cBatm!yHDP3bE1Z;tODAT^=msxOPNW!9_i+$30K~z2$kvJ{c4~Zi|Fh*>4!Tcqr z$f4l?RzRu0EDE{vTqnj&&%utbo)BMdS(fADot0TZ|rFDCTlq1qu ziXq}*EAF#|IMRnV`)j4Lqu8H7qHT8+I`hodoMJ zVN;zT!?F^ut(?motTp?p|KLVAe#AOrOo7BQ$I?n3uVF^P9hBrUrr@ZzbmEA zN1gLarq8W7Y&k>;gQ^A!ZO-l7X-5@<7A6YWzqh`OWAi5u9N7DeIX4@X3UM=4ZqJOh z+cR7B_Rd(ny)#vB*KD=hHB;rDnXPiq%tW~t<>k4WGOVSTdmcV3bwrHM#TXH&^WP+z z6dm#6spweA;?Y^?(|Dy76ezS>4CF-638nJmFq>&dazll{x!1=gy#9F4FJ#-V3gvbhLU zOExKI(y7Y*P{u593Wt)0nE``nEJ9@m74j!PkVp79C2So9G_M>rwX_+LAPT-yn?wlv=In1Hwt;fU(_mg}X2UYHZ1;+sF4p@ExL8eB0x zh%gr*+A5ZiCsYw&;F$~D>5$(7lEs0LRMiV~Y~V~LL{lnJTy|tr+G7L`!c2gwG3A*w z_A4zTyQ58@_Z$^qrjfiv{<8XnN3|Z$6fm}0(k!Hbn<;_QP$AtA zUr9#;BRSwge5pAF_7mb)5qH1e|>Oln- zh$YX=jd2X3+%~DB0-7{wo5YOC&UhZ~F>>CvgV{Y({RV3v-soNXbMMxDy#-%g`LB&Q z{k2%_y6Lo>09@H(7PIPN&90!nyh z)V9R9)o){TWC_cJ1PC(Fv@Blptfb{I8>sm=D4+8}b_=e0PVfCsx;KC9KKQJ^a<%`L zd;0K6QzlHAPsfzhDUQQb&7?3*;K+<6(%NpxW!Q~b)Z!NNpz4kYJu=&a)-O~2mFq*Q z&uFHd6`5sWW)pnqh}x7hz){L0l(-?RF-}=b7w17!Zb}=9({;FK9~)dj&@h!i8?!L| zWPhh<937p{^03T+l|xV;iFpO$x{c7CTqmpdXlTl z@NSy}(IBC2b^#@3uftB?_L+r0Hy9v^Pe!t27u<@C%Gwr~PK4%U0n%wG;(;BmadZ}A z0*)-EHF>po5T%LfJ93Gz*XcI|(9@4W{9-TDfu^W{obD%1CvEJof)r9m;bAKeEO zP_U&mMsq?aXaa$ebfn4Rm@VzzIZcB6lk(UR&;A1ZlfTF$LjEQn&Tye1?dcZh|$%Z0zMu)S$2^-F{djF4Wm)_|= zc)LQ>7g(_Jifo;ySe<|Ce*M;?m+#7<`;Uv4)-Ju? z{rtb7e!%TlAAR=r>JK;8?%ve{dvk>KOl+t|9CpO|IJ!X_9m=m)Z=T-YuCLv`Iwhpe zcuw}oX1Hi{oQ5$_0@(^>8KtLg0@J9eHLE+G&ank%M$(LgG7_V0^zZVbacXdJY6GeJ zyWfA?z5dO_mQnX)hVEcJJS{EL7g%B(g-#L0TsT>AQypokMpy3H&GjJ!%1wOCz;y-% zFqF?#zXin6DTTE;zgZlvs?p|l9N4kb1k>o8J?0nyGgdvQ+GXlp^t#FPcW}{|*B8qb zP^vH?eSTYSk#$v(iJhWcS0(Qog)>a4mu>P1t)8(VeSW+9@wLH*T`Q!UbrZNr%g1)9 z+&U!q!+*eGE%{c*L$l}0-AyZXoy2Q2u~aE#C}wX|Fzkw?Ii7)eL)dxPv7o($a{K6y zu{BWx%W;{t1SvF&>xPxOWW03Z*csz+=tt5>X=H&>(-*=YK9RjxW4l*==-&NacIU|? zdu8bcRBDTvpLx-E&X}s|iOb*Q+|#Q5xL4A#6bnlpgR3iV_E&EA{_~+0sl#1Ym%ml>3g#u?-HJg~z~ zHuF;ZNG?Vgg|G6b?=hpw&$jcF-sws7pc(Ci<@|ESPmwd(OcK#1Nke4tOcF6Z^Je3r zvC+z6`R@Ic9fnR4RYez>nr!iy}7{`tuJO!g<{`iZh{*S$D zeX`oP@_gp6(Bj(i?i$UT0dLuB<6&%51~bKgHpc7t zMcF2aAC<&FD$W)=*vlWY+E1rASv*O&sfq_lzwVa0`}FD4=lqTa z%~WPD6|p!5 zL>bWy)8t8~2gZuHuN_VAj~26c?`__EZS%AL+P-yv=fhhPCs(3skeGRMASMXXe6wp2 z5xHCx#H46Jp+PsdZhg49acz$|0<2C?9iGsu^L1f5Gj+_@1(PvfXKD!O(`*nLCpONO zQ)w!CkyL{-8;d1$G%fwS4<E9B9;21^{QZ@fi2A7AcX{i6HE zog#VhUfIty;4HQX@bl}Q5i$i{_gF(6`7Ay~TZtKvhfSO8fUiO7;Lon89zwZRD7&lM zGn~!&G{orvCY;#w%;oqOHf_sntu}Oc$RtX&B9TcEp-V_PiV4wyRVEzYbQ6nYQX)OL z6^)`AO_&TZsCMkdxrKw;OC)NMC=khDUp~IrT&-BYvia5@yPt1>%R`pDB7cP+zh8gw zKW}xv`X#Uae=q$aufKbJ9qQj3n=`9ps-~3USs2uymQOu{UckbDWjQh|2cJy<&Y1~a zkxlnk$YW(#%jnDrX{Kx4_LEp4brvR1_F$#n8ohu{FP4Ery8$>-@RyDa*=WH6rbs!k z8&WJ4;FUrQG)>t|!Rd*ZtYcQT`^i#f8|>}YE^?O^uH=#^6Ko19uGs4^S<`)kskqlt z75BzQFU`(Rujux=)QG|r`2?H5qD{1 zvrdziaDo^ReRG_5Lo25S)QZoK_SpuC0k&zU^`)>qpAl=|*;nHEIHW`zE~I_c z3ay0G0`{>~&S|%AU)}umx2cWg`ns^yZ*6?ted7SOiMMaw!e#|rG+M1Hv%G8>0*{FsES2JTyp%MI%AHah zgJ~%?lSZy%G%LgjVCpn0!;4~Du>__hqmu`vFy%RgVwEW&L(ejFBLu^rD!OG<9mGpw z!9`V8cO8U-Wm_FfP08@@L9o>d8#G&%38?}Zm`m#YY|-f>PpX3Lwrn!i3ap5wQHF== z-E4=l#_U0C$3UDs48n`CO==}5E-xIrw5&YJ!12n7R91r&t~{??uQpm(vVg#DAP8ZY zqJw_=(6H-NEdksUB<(pBVB(ogL#+A_X;pj zU?_uq^{%Fg=Sj0YR=~NwzWZM7iN|TaZDI-n=WWZ2*MI>Be6Bd#hQow%v7q5D@|w72!b7 zJ=FkfDq^{dm>QJTdOjq!9w$*NP%k6&RX;h{d1K3b;t55(Zzd5XC{uAC+mCA*sMDJP zvLIIx9U7h@@*?oSt3i!;NfBupPNX_SEMQwugr*#u+^b&EWg7S`6sIN7SSXL|<8$-s z;Kh^b*jFbf8-U4b+yLEf0(Kf;BUmq^1_d-}cubq1mm6SL+ec1vY@CH;StKu7hX8gxPY^&D=1YJ%^}kpRr~!yd`Q0#OFKUd zAmhmJshbh$G}7`Rhf7VM)&krEomx6NYxB+byKmna9g)@ZX$rGCARZ)^Z{&;1)riO;U2Ar%kqek-m#e7`1Cx2?sU zzz1u=K&SCL+Rxxl&DVdw;M~&PqJW%aW}1dhFx_)h#A6SVrS;cdQ#idLICtAZMobyA*`b#C6XW% z0{T5Z+XZdx5X%FvtJfI82-r4Eg{aWVs<%D>I-|YeD~V!>%~3!irf`ap!IX$*V5_-8 zS+}5K8FP3HZurDDC_c)eSMzRo$5Rtp55(d9qkJ*HgCMxw`ue@@w_k1Fy0iJgoy|Xg zFoNW^$kq(WgqXaC)fTL2y>_KxK|-|@wzPT>0>R~0dO@S8&Fg_D^k9IQPY4U;dJ!biDRMT0}Ta?$h9DQ zem#iOiEleTWFl0q8lx`s&=udSI@AC+`#}K!e<3R|2h`M*8Z*7C3BK?;enn9y)pE@` zr{1KcV)h2@yV;2XA5Xav2ChmL%!nAStd~mPX~cX232`Ih5%_F}@%?2OE*u^me*KNRLn>GEctRC;ap4qfMk= zyxx7i-U0zk*;y@2%VU4KuA)XKYGP{J_HVE3m7X_Dl|x$vNQ}>|*}_}n%}_SFp$Li~ zY+WIT3YM*}?+6+VQV3NAS%?PVC@+e@=t9eIm6qwHP@W2;XhRK{L{Mt0O9M&gyyEE; zi4~c@Leo)m7l2(6UN-;DXE?MNdjB68MCp^_Mv!A zxQnt}3`NC}8m5UIUfhq3lP7z&hdxj?d~Aq#l?Ogg~Pn`NU+yx*PrILROkHiptjMk{sEu(Dr!M>DZV0HW0 zLkFiyuSU%&TUqbPGt(D5A`)3kK|v>wC!8y|L0m+W)U8^?l{L)tDk^09(Q{%=?9z^* zd2O<6#SXi?EV~!!z2t(p^^yb3V;-!!x*x=PTR!5v*)h4n7kX8i{lH)LB#k}=6x->= z>`oY*Lw_z#`D>xatSw74QFIfc3iTwRj|O?@ui(X!@~fc1E4VNgJQ^(Pd?3j%*pJe^ zrB2`x%R#f?vvGpPp!g;WiKBQXnbpaPoK+b047Rw5;W`%urD=!N0xNkia0vWL=|Szq z!h@q()Ia`Y^R3Uj>%XppmHe+f@PDMS76z1S6k55BS|^}!)5E$Om%4W#z&LLiWDdHq zA$5GWi#dfyonm0fz$yZj49jyQSCR^}k_ow@9E_x{incO{*PwO*&%7*B<$SkFTftCR z)fZ<)4){9d-tW6q-Y>R$5>Yl>?KS(suXLT_CdA1VFX~8~pxvxl~Un6WH)FqZZx)VR(tV z(Noe?n)O9AlMT%xg#%L|?O6(zXEUw>2j-Ga4IloiT!>E!)xEe@)`5k`XtYt}Mdak$}TsLp<>_@t!LE*{rvwe_^ThWfbB zyVJ7vjQU;rvQ4@u4Zh6iMRK!aW$5KG@l+ZHE|sK8gjU~#SjUmk;NwUG?{4LTQnZ7p zTB(*D->|E+B-GgjoV)90l?y7|(dNKyR6c-k^WzOjK=Ss@5ut-=iTvy#5eZ0mb>|uwgxAaF zvJ@vmrL5Rd;%f%4IgL1BJ<~gQQq5Z_4sePd>f(s#!QHFd_pfc=Tz_!)^{so~vDWX6 zMA!w<+KJ;3dlu;h*15K6J1RIT>&06l5zJ`4(ROWhAhb1&q{2;u!HK|agXJ0UY8thW zCW4lj0IzCWzyGlN?r+7&svY@#1!qDLKeEg9NwHWwJcYn^R~2c&L@H!g=kA9PB8M)4 zlkcz%R=UYjP|Q=8gPgLqLu7rgidt(3NvW4DLq2Cs0lgYTHrT9{Um`Cc4G(;k{ad{d zwZ6>ZtA?}(MZ_GDy%@U&l6BB@q~ldLX?Mp2Es213B;vSSggo%p7BK?pAI=T`MC zt(7>g)tqRxM6r5(ee<)+-Fq8-T&uamNu9WLXy_Vi=Yq&0(Z4-8!Ja8yDXc*yfy%G2 zPit6~Bi=O|0NI`XCrh1D_fS7!Zt1!7pS>|q?D>jeK(n;wRZ+%Lxdlh+hKoTv23mEV z5tDZ{Qwn|P+RR}nZ-i3k3XQKX>w4a;qdRm8-JzT%Gm{B*-BiqUTK5cil#hITBOT9aZ?(Y_p zVM&-D=he^NR$|*cT}0g@=Z$4U&nEDYDPCgBt9z=rNv~}a=w1-_QTITH!C`jlsTbeS z<`t}%3WXI z`sl0NHYYVf4=YSiCb5Q$qs;y&F++jgd`N$CbLbP2zvZ@&38x8J+AT~dh_*#Kl#ymCN*FDwURp#0m)@#y+)6oj?Q9tF? zVx!4As1bw0GLlkLDs#{7eEQnv8`mIp#7FNltvIEDWdH27XQU>K?@T{tOEmj}MPAK1 zkyp|6Rf-7BjumR3B!=ZOZ9uBhem13M3-$1^DY3j*J{`St*sblwuIqNF{fc-EVR9R# z%F6C>r1ZCX#@BjHx@PNCcxH&dsKSm+Nm}(cA)rG=R=?vadmQ7kDjY*=rC7F%Rrsi? zx~2A2Ewup6C@G7oLP~ZJ?6%lYnN#>_P&)QU4p`_;FhJ52;28zyh^G%2G$gL8|06x1 z!Fb9p92l>8JOPVo6cqv4CF0kiY(HRIMVrJBu?Cc*5nEunD^j7H`iJU@?IeDG>$6L> zkhQQw{33u~sC%3TzXT98N4N)20a&~RW3#S^oMxba&9Bvh*5XbX!7qr%pBgXpDbsxe zFJyo0+uOf@c*YWm#@U<{e+Y-=@zo=<=VoWdvsHc!F00lt!G5zdGw|Q3$%)c``EO== zdf(*Cp{YZM4o^={9p1<8&P>ei(Vp>0OW^tUb#d-}4 zANi0uusLA3rhw^nvo|@e$)2GjKGNwmZM|%KYiYTI)=~x$=QjSiN5(ib!cMx(fofHzo(vIeF_xSlxZtZADA4Q zIG_>V4B#m7=>uoaJg*-)@C;kd{^8iExiddsnCGVtl&y9PXP-N9d`^2@AMeS9@$qA4 zj%jo7ga%Xx;j{dh6I5?{@Fkn`s9l z#fo02irRN(U)lpsQbuAaI0&%m?kl*g!+sz;?ZQLxZV)gm)ch}i(b2(st|(=Yv1D`n z7Kt3E+BA#;8~wXiuHyx zpHCU5=L3p1p;uRuGc&XW}cF&F-Lq%2QF(T9@=T2b+( z^cY+fR5}R3rCCIE3@eaKyiqYMk+;>+fXbYO6g{nc;lp_|xjOM-~k?!hC&OyaER5!;L;*doM6 z03(rlJXLG7O;xD1gkWLHs0Sx*STOBK%7p?%K4`N@!75KHSm5p|_&Q;+_VhU=8k_Pk zu!&D1eEzVs5ELCmfz!tF48#a75ZjcO84o>}5Tx;C3?hEG$DkD}AQUSCwG2CioW;a7 zu%S=VWaYh)3e?Fe7?n=}#EQVTx}+qe`p}356vIS4{naWCrJ*$g3b@Z?X=%#!;ix#v zSgeJhj7BL71zNkd(_#v$XQN|3dPt?-G0#){C*~lv7!xm`7ZN9qC3VIU17anAB_?il z$%%mWuWTrNNn9LhDdk`(-&X!)7G#dLkyh0669o(x?HJIg%!d?j$pAKG%Y5PqyrGZn z@Iy-U^A_Gp8?KohBNAc+vX|mbX`G?M+l|a$$r8jPmIvNher@Eq1L)4i^_`8+#h|Di zc2HiH-3#vyJ6O$6KkCF+`+FHOm7Z9c+x8Iet2BzPCvYSq>9#Lj88M;;O2#_*_SduL zoP5(2q0Uc93_y&7(qD`F%A;Sy--z>n*I6c}HQuZaIORWl=uoZy5Bu$#oSB`TotZs6 zGd;C$Vv7Cm@ILL(?!4mg-{1N9zg+*rf7AzoT>qE+zb0p99`*mj_#ygV+&RZLmZ-si z@BeA`*Q5S_7(dniPwz|Bf$#sBL(`Lw`u}148umYfanmh0Ue?wz!vA;r@XTai{~w+> zJo(7~?_vDX-LJMxDBC>w$(T7kwI6b=1xc*UPE73IpYCKdFwc#7)ZV}UF>THzMw$@E zj3B%AN{9U)S#?C}8+IMaI>^23h+#o=D?=<7Z)$0|#2RA-J|9GR6AnTkHDwPOzDTf> zMw=S02E+oejqxo=*+XN;b$jJ#D^A>D&1S{rl{hgaZkv;67*ulu;76gwhDQWq=D}St ztA^DaSY&KJ$D8n?;?F|eP$BJ%g}yCr#ZK%J?b+1f_*w1Q)W7&yaeJ9|oOY}o5&w!H zQTb&056_5fR`rqnkMVzY9LplUxCLfV_PN>P+T@|M9;20AnTBq7j_)qDqY*LE<_0c% z)0VjWFWO_7crEmEuCo0N*+uP4fwHfCp@oUJJ1tWUF+r#)P5e&VMuaAc-+q~-E)(0_4EGc%G<+w;y;))cpRQfYKfch8do|%0e?r=ME6iBCVB@w%` z)AQ`<>F(+2rePeUh|A|P&0HuJhWF{GpZ?KOZbtcn$K_p^Q=WWCn-1pQO6PEFFD~+E zFzDRK^`ishV7Ml%i_T$_P|OWmkTs#o6%QVxgjg^Npc{BKjbl;VMKd*)jQT!k8N6cL zE(&uwN6!PDiQ0OER41c1ENWOXMgpJbNPejbj0c2gB&ZofIeZ(91AhIFYhglk^O&M@ zm=qFPzK*Vc19}oksTD+22Qmv|)~DF#lDUYZHvp&EMolQMhbO(ZiPyPCQZA7%*&pDY zTM5u@jHMj!K!Wc37E8g1BK zXjFJF>FH}%flxPKO53n$!LF0^h7+mb zkIDFWu*DR|=K|!QO~6w68v9C_H#*3}-f%~xwH{*J_cCFD6~#d}@^FVLw(AP}f}SK^ z!;kD!k^^^P(HxkaNea9v`9C!7UC^wi&D@Ba-nH%sPH+PMH~;k6g(CmASX-Vyd(8hG z#V@p?WR2G=wF)7LLkvK1-P}Uoa~{18xCMv`d=Z7I-fDS%F(Gd0SpoyuYIsIF98NUs zAc%9Ry5sN~$S&Y~S|7niwVFL&?_*-UV_7~CAgvwSOPTD2mBq3fJkt<|>BCj!uU_=*sEV6>^Gbv>==c)s6k3#&g~+bEPdU)y2?mKBMs&+0}&pU#Y>urpAJ0eoago0jPXdivVx z#@x&=pOQX%Axy^!_8o?vp8MO?D;ulpm(O2)@!S-2_XMZjti-jAwX0WFScy0`V%A@7gD_QR%lDRBzm@LvxL%*wE%a){2w z*l3(E+CY&JZvnlkt1qloFF-S^DS3p-u>9S}G)Uv_YnBMiM|0Qt^dWvVg2v&;^OiB-y`{*WX@Dz!%ehbB;f{YgwqAv1+lh% zZu9c``OO#k{+Q_p3D;OL`GX5r<0Z-yO}h)ivqw${N%Gye}^3a zOp^cb%ztS8pFO*Dy#9~kcP#%M%YVo6-$D8Bagooy@1F$yhorg4_2oUlOrZbEXBQ6m ze_1-F|3~wC?ld|)qk7N^>lMzIg|irN07>YU?Y3qq`ujivIZJ`0B1xR3!aL|J#q)pE zNTUa|=S~xjJf`BF7pbx{OT&I zOxSnEe1=uOXQ8H{Lb4CS@Ss9CNx;MmkgTu0vdZ$U1Lj`ZtdR9fSI!St=>Q?>RV(E5 z^Mtq^Xf-``T>$P9A=^SyZZLLpIjZ3sF|fzY5RW`a6j&CzyrBTqvKA<+ZvfNPaW~LYokj^J(&mZ`Y&Yn)@Zo$l>MA?oha*r#z znA>g`p1ZhEK0BWMl+4Yvai#j0sIn$zOl96tIWz3iyEh_G`g_mB`oY!7~|ox(#l{x zrkN9P_9yFoa&l6?UfWHNQ7UuHM@{sE;6%xEBF{ihWHRGFm}k-zdYhK*xpGLPz~ z!z%n&p{MB+3D-D_FlWvjAg!F%B)N90uyp~GSQSN!*OcCgWs$o)ny73A?$vNj>UQ9z8B)!I28%+{nv%@)?~`_Fjggx!vX+{W z|HMEIJ<5YZl7>8s7TP-&T@oosGPOuY=Zl5KkU^fhE*29kmn&5J8>+p6{6~T&zzAqp zsm8`m^F6y8g?ZSdN%dU+vebOej7AspX6gCd3HM&io1_l4o;414y=0PilL>%ch^5Lh z^5@+{CW8#`Gx^Onov~pcS^2NL{BM|BJaMiQ%GEJJ{$E@?;Qw{8wpcrs|BvE#k|uEp zR_w4t*ASh^NwmloZX%2JiX`zK3EPa-#l>u*J#1*Du?h2M!XyqbBm7&htZi&wJ-@!r zyi8XB<_a!-=D5uZOoA)GzXo~j&OQ<> zV0b4u#^J#SYIV0>-kf6&axu&5I#Xg62TS<1VPgdiH_+JdWD>_n7g}}}$$&a|N0}sV zn#SJi*k3HY9Y<(9LV=)IL2-yf@hxj7Dl2x->@|6y=R;esUa;)fc>_egoYJA#?A!+p z?fO`1-E9N~%m0`35F5iRV6IpO&f<<0cs$!>J&0HgPi{eveag=rOGNcO&X41ueJ*03 zpFj=gXIZO|xf$}S>Q*mWs-Tu0c9{ASQW2gfyr%m}@;s)J(|!O`|JPO6x~k}YRtSii zPpfX1$>ofMR#9+w>;}+0Vzluz0k13_k_X_kSNOMK`CC?Zdk$#w7$CMuV}rafB9Rw^ zJi-nTAg3U@0;LJT4fVO_=<1~x=<{PTX~M^8)oy|)tXWaJM$kcXeHA7L1el2F%0Q04 zdWo$HvT^>U)jG?zvii!}Me%%TgE85CD8S+Sh;#p&B6zCmF$}^Q+di~U5eg22FAN}ZA%A#D-Q#HVe3LjurOa&OD-0QRIC22!NY0nbTc$VmQ z?5d$_Q2={p6;@!N;}wW1#^{7}!wP^Q%XJ9GsVo>_gNaKNGV)k}36;w}aYkNCih`yk z3raW(K|0%G(hNo?;a?y1{`$E8%JF|92!moB6ZpRcVEl&fe=jc_$NxBzU(o?3Im{m> z(HnXc*&(dJE{qul_+i063G+TrGXIw(^AJzimJ6%bWdCSpHw-O9V;&BX&j>*-gnvNf zci}w>nxV#=jgr(WFX2wy31bVHA6bI_*@$@luZIv!SZ6<0AW7V2{W4^+2sk; z%xQ*+TT?Ez2RuXJEuW>)C#|TnKoURcB*uHCHr-^WAP7(*@L^vELnFDdsX&@(z zI!}^!1WIyFzlmeG;R3-sQp9OSK7n4mIzNwpOx<#ULxZPQ95(Q;jgB_)0hti|<1FGI z->`X5Vtk2U!tpPF^hnVaC_(3*guCk`&bABH?s$Yd1Si75H!}ZP*mZsOz?;|w+~Iv2 z=Z-r6!E1T>jQJcPVC;}*Zc=pgO}L+G!u?JY=ozng$e}bz9YhnqAGN*iqQ+K2@?s*_ zjQ4=j6yNEm&!J=cBz37t05cJzLKI&)NCKzo^Zh zU06Q$|8gY1N%KEd;3x4L!T+&2=iJ}o(sFGnng994CFK8VON)=&{XZnQN70@m{yk3d zpLEl-`JqqZlyxXFd-|OUmww!j;6z7(-+g>z@ZP7~jo$?Bz+xNeIfA8OK4DNjm&E5O@!+a$7{aZKk zJ=y#87lYsaY4E{&{OjO@yW;}DK9X=$jOUQ?uA7e&1)KeXBCMeS6RBFU(GTKK3-!=Z zEFcvRRN4d0DmV|8SDp^$Ffki~WEsEgb8;%_*19O#%B6Os@WA&zEb9y_9fSW7pijctEGCi0o zOA54die1Mo;fv9xyF4ShWA zPy@$vPHlefhjTRz1;y9Rj{2VYsvb`Rd~FI~pl^W=bW*(pcbc{b@Hz#HYv|pE6$Dc> z-wagI8Tm9XvYUN%c)vMC<^CJ$utB)pQWeCJ#q{DSWCJ{KQ3i$qR~3H&x)(aC)Y{bp zTQ^l{wd*%k(L6a5QwG1L+GTb+rY;8hy00pRF{{5u+|=abQinQlZ0OY0>YA#1T!`8` zRam?j4$Fhl2B9)kW#byE=oYDNMse5fU0S(tQI-Gmf|k~spV!y~s>R@HI(p>mBcc?_ zL^Min=_PUHhBVIND-~ZSYMN7k!I!@qy#3`kWpi~%Gb=Q&N1&QzcV6YyqGO_#O#(}8 zHspC;3ythLf~m( zc_Y6~xC%k1l>=Eq}F?w(F)jDmtXhKG9&|?2Eg@1(r5BOxbU~ z-uvW_W6vG0qBHsk+m82YbEf@cjt`IeEYDC-waCvHo?yr;Rphxo!?)#Cv1o!A=?!^I z&W;n6ls@u%jyy>~BQlklL7oc?53FRRwmPBLR1(6}cCke7E)N*$ zM%keAIj}ck7#1Z_uV6AcMF~agOnCt+HszOc*vFgv3Jgl3Xh)Y6^807m=-PRhz>*)6 z%$ky2v?&LlMyp0+ZMNk)7H&DR(0)@P;5{?-kc5#DM{+^HjgD{2Ml6>VVNyU4JQh$$ zmIsrPS5iPLYAcL>s~h_*+2Ln#kU@@YS#Haf9nkVjath+=wqxkB69B71L*G`i11Z6f zXE5xRWXa{4L6v2BQi!hJElKiH5E)4!14``7W#P~cT@t2XKrRa#hO%7?@&1|YOi9U2 zDHPs?lLTQl@v<;sLxOQg!B~jrYwfbUdJ1=~ZI@-kG8iu~W!nehBT8|SP^E`2(<2&o za&tr)l5Z)R>6JwK4AgdY&DwU=>g}pFnBhLV5hM$_6ONd3837vY${pK?_))BPK-GFN z`A$)+zO-3Fu)hD*`yw+Pyz^iCfB5+!GPWI3)*veU-Gpg~d788gO?fed91F&?Z3X?P z&F`V-uIsZ{KzRFI)Eij7CvD~X;MAMbzt4)o-^H*Y=o_80kb z>EO;kJ@}8e_ix>J@Xg)(_x^|XF?+rF_F)Qwhp19MY??<-bfn{Hv4|f(D%ShOBoBQl zmuIpj<<9>OKEAzw=d=9}-x)vGxQ{RcZB{={Vd|TKR~jnXW%G(fX`(H+ZX}w1bzKer zKE0|Y?VwOuL)R1ghiTVta6tKWk)=(Xvb|5g8hrcK*vZ;-VQGO7NPRD4T`w#*>3Q1w zcwiubjZ!Nv9OKW8l|zpAbPhF9C=!HPHF<>8YX^YSO6aw>~F zWO9{W9@3Ym@?-AUE0m*RR>5!X%Y&8HvrMm_XKHqNZ8^FWm_l7H4VrUSaC9f*{a7C1 z(366s5~b(`W-8#K3mM6xGD84aE&7lf7+LTUK4Bz_$a_+e)ljCMGo-bYc|R($z+t;2 zUC4o;*^Io37@d^Jj!E8ii7ag5w?tOwHPT^_Vj)siWEpgNHAxompm&$)Q~)4LcOnlh zd>b+IQ8}y+Sm7DyN|J%yn7?cV%!?!N!}MxN8_K=UZhrS~pFjBGtp|5M8vM)62j719 z;Io^D+fzRO*6x1+=p&3s-rKa>zy&z{rk=2t|Otut6e>^)ay=fOT z4GKu2W+UczT1vQ_6Z3sn@ChnHq{dvye1GC+#!!cbZI?c+%xrY}dRfHIwt+}5E8t{& zx7}=_U7;jc;`Brk3>RJtm;uhH6pgOxWpVUX>GgJcHn>MiD3$dNZPz;TX$N4EzKPzU}{&M8W;yd z+Df4vl)pNYfmuDjwBVgV;iB>yuS<(b30&EYFoSfh0A<6nYM30LXKtDL_ExxEa!ux> zs|0DZ(3H9~IkE@|)ktnu%kPglang68u@Xv&0w_q7Bk)0rCx>a$P;EKHkMrat%mWH; zo3ZZ$X)Yr!{_^(VgD>~L`RDz6pX~km?%vI@W+212?vCsf*!N|r%S)bVxerDErkiCi zA7pz+uoLb`!k{V?q`fK8qZ_8HVF*JuHt7aV|EBmn5iJm6@ZqoafB(haC%+oJ_u1g% z+lQM6iDn8jA>DD%S%2S)Y2;x%RH{=fl2yjrNT0Z{wy|=Cg4~7{L3}|gC>8GhE;Z;u zo1nLU{@~76d;fTQ@X77{|Gu|>?>G0qdXMWs=!ib?HcSu-zvt_v8J{S>A2P4tXwU6Q zZ#CSZc)x2lG{-Eve`nxvx8cR3+ABxU0@x&Bk&C0kgOp8trx(TdiHN)ZuXhIDd^EW8 z`QE!Z^35|kTnU9!;P>^+UP@K+FUB4Vko<){OC`E58oZU z`^EilzC~piYcoemZY8yU>jo#uXd#vK#r?gWjeHNS&q9!j8yt|uf9zdblN`mB{wo!J+6}9`NHS}9*o_cEHd-?Wfn+3LL0n`mHnLb7T^wMqJR{JL@pRA36MtdzWL9-ocURBkIn@^Z;0P`gUG<&H zs?0oj^5i++k)y@HvTc8G|YoDAr1tgiC8d)}5 z_+g!{$0%($?4M(2{8U}i=LBme!NuO*7{2!!tl?MR7~Fn;@X8m58yzQ4|8(t$v$pco z5$8GhORSw-I}QIkb>@g}f>;B4qfp~T!cAd%;MMj4PjghG&BKhwo_c|0Ar;1k=~vyB z63*K<@v&~mK>JDLk6j>yrNyM^sY+2Uu8>WmeRWBdnTcV3Jp7pC_Vt}_-kCe-wU}|} zJ=iWOk9@8x#DPn?w5E&mMyh?HjAwIL{)#s)}IjRL9 zD9PwuE=Az7R$oeRV=%IaD34`MMkmZ?`8o|AdTz*hN^E*2Hc7y&%Y-XE765a)3sFZL zBd4;LPdY9OIy^&-%1OM}-Qan^TdCM+A|=jK!PDjfPy=yN1lNSXboi#n11aJLFVP8D z7o~nD;c7J(I0Z9_kAzbGu+Pr*v8ulqNn{~dwNis#NE5pLM?_^it-N&3S=eL>IX>Jv;Q-IXiSfEB| z2YhlofXkyC|F2*ZVlZ*WThl!1eYJbq;bJf&5={<;5Rq~PFeK-ZviBm_imT9Gv3)8M zNfi1$%R0~ds-ceoMkBr2s2r{>?ZM;vgBn+`kd_Fn2zf6>=71W{r?%lKUSgMveAJ;}YXb4JmO!P3IZEYHc$eN- zg3+<{r{N?=m*Xg_>~LK3u?9dTQ6Ek`GKt%9pA{KSjZ|jVbrJ0@du?Rj)A{5(c5nuD;|q()q}WdVM4$*EyC!h4Xt&0#w7LH;%EsO&KAe9|deda^(&zbT`dQbN&%^Td zxJn2^2y$W7%71aV)J(PQf+ACjH9EQOX(O|QrqEhut~a66jiX;riPU>o$SH(7-;e)D zoY70-UVOPEJ5e;58cFR0y1adG*XiK_Lf`1ZU?!wXfdt6687D87e(x4jfFU;O{hvj&^F9*Gep8YfJg+cXN z0kuqWHCeO499|>LcNESC2x6b-gXv2|)9J5=6hwD#OGvVrO^SQoxs?-#(<*-&VDs4z z&?T#0DqN;~M!7p541^)!H&EiRp85>x3(cNY!T7_xCb~fAvpVogAO%TWv_2;>@v`lVO1%Qf#2qyy91KL?$}Q zrK1QjyiSJCz8`nnM|^NQo-p5ScO=LO6j}1+x46;oFK_i zvFtjj#wKr@@Vv3keH2eF@nBRn)XVM>OK+)tSC$_&n+i%VH)uNBo^R28CqGa@Z7n`s zKOHSDxL&QUCo$=(6ZWqxErpuqn~4pjQ-!=96`eLaJOe#iTOH14ae<~Mr54i72QsB2 zf2Ye3Ms>=@%ebEu$`m#`*(X@jGRYm`Ut>#qo_xzAr_WFK^YJuy_+B^E0xMsRee}KM z^lM|5o0!J?y+VwqDNZ+uQ4-Le8l|=Tb4ZFqo2}sX)ZMNPMQQ2vY?ix~9#HKp{$W{7 z-W%Izoy&5)7n1orra_TTYxE40#HKp}B>ie%Y}`aCc%jg;Ssd#mx2zLie%@#rmROut z9l=DB;XARh3`0x$@}l1JXayJMn*hFSpiHH)JXxMZKY~xygu_ zQCg7Hb?~{{JVVP)v`-^9ECj(_@16>H-c@3WfN`)V~)S+x7LxmQZQ<`0ig3JzwI zPWseq4=R2yHqu-qp$nA6qKd~m@7DxIuLj8H(9!PbywT7eXYH{7$ z-#yoMeAwQ~JO;H(JWFkiSbGcQoS-ZhyO5E}MKv_s?sc1cOAh;NRWs8$N2eGPH@$TH z9EnXk8>Vx)Ro*`PKo@{opQHS`H%KF5SrhE9K9LX_tei$tz%%u@RbE#fRu>|Jxhy*t zF0C$;dfqEH*)hV(`pbN+MeX*S#`mu7Op2eRo7C4N}0!FBpUtjc2a}?5+l}9QAMG5n6^)mgm zx7&D7NsLJWOus>a`1UZKl>D=}pVva8E-^Y0953to8$1WApij z8g5k%9@!#m`)x{cDUFSG(Pv=z*QGhr%^zjg-(#Ziy1$?{dh#!6n!e~$_M%3~v=ISz zsmIS=-3qQ9bcFbHYQeJ?wIjZuEn($T*g`-p?y_qEyQAi&!T`IHYIYblKD9DeUlJ2} z@!(fHC=dPHQ@qVuX#`kPKvw0_kP8v3oU~kH9qfcT#PYbFv{{w3kX6~=0wVX>#kGgW zU%@-s(!uiBoit^^KRKSN6$jl~S!7FHmA&Cvs&{twVVJy8jV3R~EYz}C5suQWj*sEn zu8rW>qbsUmwVn=VOS?0w4!cLEf64XPP3|`b;s7MDNw6$bTmTPGh%}J0k7ZQ?6lD5Hf-Vg@~q-T@-5yBn3{f3SeIb1OkJ!zX@YM^94K! zxgna2yKXOiG8tK~#3@rM$!QdqZkqpLNZI2D@9Pg}V6$>8Ko#kE$Yp25+mw zFLVsgi_^_i22EVweF@6eg=QLH)j$>uN+UPHn`2pn3(cG%7mR&uJye}3^a2TdT13o_ zZUJ0lcu*3>2wA$_LwA%QM@Ksvkil$N@4P;GkX2Yhl^Xf6pH}=Jbo?fxhuLrNZA*4N^nS*diyP^lbBf*yR@2mIb}+ zL}ayos=rcTBFCEJ1fupZF+nCHFbE=XFal&&luomrO zPrgqA1Uz?lN{;adHj$EoiP(ibehpzEp*bhadv3en`8?{sWQ07Vis$hD@2ARU0{Ufv z+2Qg3`0@C&QhE{jao0-aatZ=hR8LpYVsWki9A|0(Idwp&GxuinufYKSs?h55V7{eY6-Dn2QV53nB`vpK+S?GB?2VCllzY%;-MZ?6KHB!#jiA?SW9 z3b)^E_E`J4Kkkv1*<6@zu>-pHNtd2cP1o#>XVv^5E33IiVELC9)tge9ql53fCel1b zOVxGkbT<90=~iTx9u>@+wXXSpN#-QjN2)t?r-DpGbsX4?aypZVq!Cz=x|~^M&R}>9 zllw6kmMvq=VD4<^V~*W+{^>~1xe7^s_%jpev)sxMVplcAEm*H}Rp`0{l9GM|t}hgC z7bD+0CwyCwN{{#>2D&%ZIbgIU0cSER0jJ7{FPejEVp&K94mk5G{D!gl(Z8AQ+Us}; z(e3gC4>wJYX1#ED!joZ!y8dV15#a>U(2SK+8&pgU?nW<*R^mWWW>WDi7-u|ZH(I#5 z*3HrSKD=wId*%H*8LdYKZZb?Y!G#dicy(DW)T58EhlKDqe2vh?$$~1@s&lF0r7APZChKvGp%7PX9c#=wqEEvid~#>)v3fj}REy8TS-hE62}Au6JQ8FAsWs4PT@#A-^Plzgogx+k1wNgYIVz}NwcBB4O1RLnx`sHqV4w& z-_Lbz{x;Ha*U*9wd#w_c#ya@g28g0ALr52JoKMFDw=CR&b4B)fU*Bzd`>@M9pvf(` zWO_1%hqq>UAU3wU`ug6lf8>537fS^e52-0w>HjF|8f0DVfRrRCO_47HkRoAqhK~eA zxIg7bD-dY)`lO`iSuyaJKoJpKLGsKAs32od#q?iX<{y6TFWTiSm_sDV$-~JQ@ByvK zOdYjJXp7BFtcNQr&9<9H}d9#2zsS#Y6=+k&sZQnrip2+z7iH`~`6Z zhGZ3_2HwA|;sHWYJ|wMu7~1y=ndX7s(?i9X#a_?ABLX(*;RGG?37XO*R1U{BB;m}I zR}6Ronj3Gmrn$OP2w$fsB5*HSghnO$n-qwRQ#F54zya!^?N9q%=CaG%?44Q4 zb1|bvz$095s2V4#vcW{4Y_KA9d=I0XUdMnwMx*icORcYQiF2zce`uCCQc09!oEdq)q&kPE(S+n#qR#qM_sl4}JAt@6<07;uTnG*HDH}#tl`zr~ zOuLmY$`aFFb<|G{&?${MfI0F>7njR$=tFPE-B4->a5{n4$pf;4PfZRTIWaeUJ|H4m zR(zd${U=$^ubnkN=v`ICZJZTG+GJSr>@1N9E$nK&7vC!D+Mg#sY0fu+Y^Xc|_EVIRVz`F?M3cvom6&NcGVLiat+VJ%D z9SoPcKij!S`={-fQCuhuxG-WC8F9U!+yVDg3_P&@tPv&))2I`j!6Zxy0>Q%`d)&SL=&pC6h{0E;$Ulg4_oScd0_|y(XiSB4egd=6HTp`THdUMp zg)a!HzvNuV?zr)c(J>WMlCE=Fez|4eh@i>oO-bIgFtM0S>;v)D#++Cdi`$S5ob9`& zz{T_Fcuy=CDEO!b&Ls7vQnw31;Fe4dxWk9_7cobsaMP{}D|8dh%)y#Pb`~8uTDurG znpVEfy|Dxtc9=Vm#%3DOew&`eWl2eoB-S*>)|bP+@Im@$cwj7@@4vH3eaSD!eWV6C zg5Y>b>4}4if03t+u(EBa8%jp3*l3}z1p+S1jOF7Fhf|jNHUOn!a9zIr^jRt-8ufk1 zsnrrNnMDVdjovxP^n-Pp0+iM=nj7sMihu5-ljAvY8h{0qsqDXN6oy< zmU9A|{&p`QQZN$1{;(*_bEfqj>~TiU6(TA~eBbx}4SO z!N28D5hVm~1rVs^nmF=WHmjQkoFOGVwWNG$GEC+Gh1CzVhSO$tCD-G4^1DdEFehi! zZWw zeAFrLdcOEPSAMWs;5Q#a)@@au1vbKtcNHAb2 z%&(B_dbgUogsRbsKs-bub!xyGMSRUZ2EO2l*$;EWAC7uXJ(-A8wP;*ZljK}(#8=lz zUb;s1CNtS=LmswEchAow``swoz!hA=PX`?yw~5tCXCr~U&Z;mIU2OL0oN!$KPUC$( zKk@m*$QG+cLF4kAM5&O!XxG71f#$zi^*BKAcE~wyDD7R7P`+0VK`K5xcP)C!82_B{;KQ zzqg)H%l-P?pyPXcX2bJ+TGRD?7`n-OtN~TF9+!U(?4^3wwB5}J)h;wm-aB}(F`hb1 zj8ytU)gh#v2{Voc^pDUeh{O?~ZZP)jMR$9}#@Q8mpYr`0c+mY;wNR}-jx9{MNtLmW z>)O$RfT^}|yIC_OVG<6frldCvH=!Zn-a6g#OyFpkIo=9N+7>=1IK2ojpNS=j-&xgn%)gN%-0{}xI@LK;lF&BiTnK9? z#l0J=6%^X)2(VnK!ZAS3fI~;!DHhZw_ELZ*hFXi#@u;&qW_5(n+0>Z%(iIEwzjxiuw!s%ZoYmoc-m7MRhMH6seo=so9D}_hNCPx59xbF zwl}=(Z$rrhrJbx=QAW+t%BcIqZ*!8EJu7ZEYD{zPleHyYF~zc|GkBWX`JQ?3{jj&` zi8>m~j`5xdZx%^8%Ww$3{C&Z1OFd*4Mvl(2$%r_})XT^`5i5Wvr}=569+IArCsHEn za4T6=TS^g0Et2jOEC9M^0TKU-KTF*=+mdXPDoM@LTSbwasVXABnxVNlTcm)p@zC%V zdcN0u!PpMXbt90jP!3&Ijs4Jt`A1(YO_l1Kji+rZ{Yp-boVuysZ6NtFH~UAj*iU;e`^J1 z9BC{KXP7!T8Y6W{TQ;?&@|bcBTFNFZLNtzP6-l44M+tL)N|7OaUFUwEU-Y~IGyL&+ za@|D{d;8pVQqD=wvAY{a?p=@%JOd7QC$$w^kaG}r>m1CL8gp6zwbiT6j48cu+vMlb zW;;RGkq({7;pi+o8-jYdf}B!2G#n*q(Wt)cbj)h|Z24Twe#>#1UZfCVGCnX0$Izg# zWYGamm1EI3;9~dh9Nm^_6JlJ67#dg&n#wSKF^$>ss0Jw09@n6@EIL*RK(l5Ye=OhM z!heA5&g(aD+y^9%MF;h;C=?W%Ya6lp+cky~@s6x3--vw=uO{uyHwCY2Ad9OuW3OMa zY6uWwqu(us2dZAzLPkQCOD<={=QJ#Zr#o(p;o*H;gfSS*?SKHXZ}5nY^w&Z$>MU2D z?LnCM?wMlyP?L6n{?wFX5JaN8qIezIOV@R`FV&Ln&TfsL&!ig^N7g5P!;@u(DP@Co zVV|KhWJPMb5O&0&BRY3VRNHGG!FT!Z1l0=W)zPwpXWN`bjh0YF@-U00Z@yfHV^CRj zk`7jg9Ca7oxw}*M1*n=r4i)dRD=zP<$H^^N>^9ft#^%;qs0|A6wzkZGcs8acUC5ZZ zMfJ{tXt_nklxA144c?_CwCFxTwMCS&C_((}R@0N~%J$kO-{$r@AG=p=Q`efp@ZyBP z%s_SDZnE9gRW}(rqUH`(Ui2jV)%BGXwKL4ftUeX3){+b zKCrySQL#&#+Iia2PvKC~fPxT8&q&aBZaq-+kw*va%TMyr5y|OKl}F`Q#M6&P&krAu z>P`UZ(BTNSR(#BS*%Hb)_Q23f5YEwDAJCKY5e<5!&c><+-)rA>iCa^zKKX{Xldq>` zHf`DZD6QH0a383)7-R&%S4Q)j9e^1cu+kLtBnUi8v`1Yc^Zih9ZkluJ$_P{6u`$}` z}yRQvMX{v1`UuLRr_qU}$92NwyeTVVrU&p73@rdKRbg-F{JN}ByF zWj9SR@^mN%9ik=YoL<8O&(0N!FJruClNOc}O>TC;Ia;h6d|LES+vn|RncKHv)}w(f z?PM61zELQ(P8Dk7@TP`kz1I=*;=Sa(HX)EvxO%Fg%Wzb}o28X1VFF;O#&K5u$XRDR zB2EK+E^sroO$K4NU}idLE!ueg9oRT;x&|mU%~1jeHBX&`d_eTW0-{y5HO9dG02DgZ zz(Iu)VVmNcl{`HR%5V?+N#`2;JQg!aK|7_TB#a%NU^*ye90TLj(u$0$tavK(#^%~P zZ7z=ru>j2^8GHwnV{}3~s>#r$%ADomzNhfSJNZCuYro8NGE2Dm_2dUg8eQ-ozYo{^ zo=F^0u5tTwCzTmkPkIsx_$_XO7iS{q{elmA42Z~xI3#~URP&^0^U;n@X+R2d^piD!=i1X)9;h#GkPW^h)p z@_lo)GcfFVp4u;HYEYxXIf|^)4F#&i0e~1N)fZV)fWCAlZR~-KLCP>bZr*TWK1kgy zc>xpMeJ#Zl(3&=sIxox{*%!%Q0vRi0sda}NZprintI_lExp2e#)1(}s)gu)ZH793kwg@sN;(8mibCSH#hZPO( zo*7pJh`Q$eD0wMU9>e#^aPie+olQTmNb3yeHPKUFpY-spdkqq?^FzmyxpF@Bu2|_4 zP1}`cn&t5s-t&{&@O4+%h=^?VqiR{~|IxEPA*J%6JETzbbtD&RV4@+65z+WFk9hrK z&X%F_)00r>^f3bLxLN4-LD!^O@$E}8QoMoJ;<^}RV>`}Ma`RKkmLht!qoq+U^ii{T zA+_|~Q_0Q_WyTD2y$F#*kd=l7noS~@Hs@MCUUt9w=C?*q)N5rxsIh%o=i^fNVrpV)a+pdqTC()OU_eavC4K_H!iuj7&D)N zIJ%g5Og`+GIBPK5CJL7qDo(K=19!mSEw;V6y6mm;W+NP|66{VdNm8>|&J&wvg0u7M z00SBv>MMHY{L=YsMZ!BnoKb$ypTu;T&zLhEwl5dkM5=);&+#ZA&mLTAiK8ChlQ=qk>%t&Rt|cv`v&Q!i2qI z-k@3&OXFJAu7z@8MG^3ds39UyQPdr}bM_+bVt{cu)e(F5$iT?+ys32T8DhaOj5(ED zJkt89V(8+kBK44{0>vETa6xfF-GY|75hir}PWj>#=&Tu8HAK2S2MOBl8q4cO|HG#k z)QYGQULmYfK&g;iCaFwP@qbhorI1u=(7wbX8kGM(xBt(>+7%TlHL)RTEA%)2_>>r6 z>9}MKReB(Y|AbdB1^BChgAk(pBo2Fr^QEe3MiYOVxGcHTLqQ{3QWr16c{gk2scbROXM3D5hphjzXG zj?jQc!3E{@1<$oZ04eraxRfbufd+m?o+pAvIF9V#YkHz*XjxMj*5LY#yM<;-E*6AI zW#oDBC1Y=m<>X+BM|*i$)d|prjI~kpPIvHaXKyNH+n&c$jZD1VZ1rZ zGnoEKZWPl8|0Vbt))eUcSI8#H-?$xu5Y;M^7htH6_rYq*@7y(H(H_Uy+Sl7M(%_zS z3p_1%G`tdJC`(fymlm6rdVZnX`0>o|>^E-6Zda!bWl$QGLWx=tr}lR_?H9ZXx8!Jn zZ>oS|tJKhH$+ok*U=1ENCI8Dm4y9aqxZDC!2MSIop)K3q&E+?fQ7WWSFi}Q|4npet z7*YUX;YHpsFs$rmdbmH!%nVs!tl^!gVr%aa+q_eEeNY%43aJ%wH%6Hx-o#Lhq+^bN zADX~V2WvypZ##sUf#~(Y3XfyJjM24{f5jE;(ct|{g02QX15Ph1mgka`^pPS^CqffP zc6h)g2sE5E^f=HciaQ~W0q?$}cHVeE4j$%%bl$#kKxn~yjnY3PCMR&}BNZ{SvGnU= zhy}{z>xNLpvS_?ICpClo7N!^;+0S!TW6m4A%o(3~_@x8{sd65bq+ zAWL#%)SahFr2d2Ux-S{={=@-^h!YQ{-;zmtT=m4av9aXx!s=>U8ktqGH0YLPDwUa# zvq@KveX{OWOMuGX=KMGO9R_t7+&h;89V|9KqD zzx!V~(uJ8@=HeA6v^9WJjm@sY;G-m^gU4DUSChY`Y*k+y$QpMVrJ2J9X*)6w1;m{k zF>6+#{8KR2Oo2jKi0Y}AKBysLCEtFeeB5*?(>VAOh*dglyNK%wTl31bt&LFNQ1gAL znP)z*(vg*qTWt&JI1j7xG5xR*_;M8$S@o(>-kd#t zkBrT}J27xsp}p=p2YRt_7v7%TYW~F4DK=QIIyE!$if|};BF(O^30 ze0{+sAd`^@1{i6W^bsMv0nz}k#=eq$`le9~gi7eaE+;#Qe7Swf>T0%NctNz#jIb7r zedtmq@>X$9jcZ^`K_|vm(F2;~U@^5KiGln#Vx>AWYefH?7W_m=Hv|zGSA$!xEd^T} z=ufS^&CvBCAxhw}HsZ@bYcoG0v^)X|CK>ioqqvh3WdtUZ&cE2z;=zchu~KkxKBg~T z=w61ahIaf*Zp$poH7QA%jI+P}#bMNESLz3~*Ht#{5X;g^Q6Q{Qe_+`K`bm;iR)!)j z)~@GhM5Nr)65=df4H}WIVi1>>NB=qBL3Hp%c^5h|zS-x^?qlpSQMgSyR(f)M{3%q_ zEoC=FBK?!a&W2k%t+f-nKwEkap@OIIG*jL#7VM7r3?iD|YNC=_GMrupY3OdwnOngs zvio-exzO>vl%*nSZ5x7BCI9@x?7{#ELX?(df3Rt;Ns07+3{PdRjYYKdl4vCOAt}kI zJ-3_OLgT5I3D}ago%bH29?05@MFsugnJ{AEh(8q6^4X{f=`8O)y9iPm0*0Ol;=4GwFW30;z*k_?m9;-( z<)0bcXC;8m!*|lYnEh%TuoGMa>M~D*ez~CSV5UT@ zlMvVjPrGR2Sp#ApEC6xg#F-m}#R|>!gj!GvYVvji4j#nz`^3#1SCDBAl%!e2yh=yF zje#?f^B?+p?WM3F4FEnmB@ynA8)aGS4_@b-QG>dtm@Q6MybU>{fWl5_+#{{4<#>7c z;A?)Xd4WWD+9>GfUJQ!erH<5--c}<#CVEu7#`I5UMjh>V>iYmNM(~kT<;_TF2$xVB zBhCH-X1QpN(F;(DFef@%B^98lZPDgs!VYPyng|jDa?W(!o4u8Xq?3)KPb-Z?6LauB zj2Q$KxJ#h2d3#|YoOm(*4Ya{#v+k zy)b=-%j$ag#zsy=$)vy)S=H6^Q`umTIB}re#I7}Dh$Yz6DSVi)-Ozvs9VZwFkZe=LxD;yD8{ug?cu()SFbL+G23Ekd zF8&g3#jz{p%Yywg>7@=mV*Hn0+KzIHhB4}#cCHj|GJI5D_*os%4LOb9AXAWwyAb@5 zd1J-n^{m&^0Q8gGG0x%bQn+N^spESP&8DyUM;5wE0W4eI2n31&@>Q{Xfo(!caYVS> zHlgfxzrfYXJfs?wH!3|Ntr1hNtcmPB9CiifI50HX1HY`)eJ!j^`m%r@{5#$T+K`Iv zT|(AkQ5_kX=2{*>{m=Ru(?G~r%NeHD_j~=wirQD&!cQdq>co~|$j^!uHC^=4j}7ZO zRq~H3iWusjSm}WQqW5@QVAN3DQ~qp*4b=`>bUVV?(lPL#m?-#yaCC?KmyG>b3(hPi zA(R^6*_mB`i$1*EGaz=jPg*sQReT9~j&NXm(ta9b_5|R&^zgA>zaRyO!9S*)+Ke&9 zV$!LBGk#@qMudWx>A<;Yy23|f8q&-OdaQ{E{fJ)9(i-d4NA~dnOn1LRIu7@h_>jD+NH&i!7*~uPCf{1ByIa^1BYBK zG_k~^ZotUY_z<5|61!Ru>gxLs`G#@ePH}eLc12<$v9j>~VMe>ZQ>V+$J1GVWs`xH4 z0d!)AxKKDt{?|X}fXw`;Pz1^lf&~c(-9$bp4ibkZ2mpqXf+rN*d*E3~MYjXs`|b(o z0!h#V00R4|){hlL9465}lb3ZuZz0t#tmKVXL>#11KjmL|(MQjUOt?Q-H0ZAgKlyJJ zN4{T%TR(TGjg--P?COQ!t1?(dbE9N%;} z;}*W&!9(sm`WIAjophF@em{BLpNH6-pBuW|pO=~LuPZq^Ao}Gc>u*8$;UF+o^uvpv z)sAJd@@QgT-v|S~ts%lp3_WYHSM0ul=lT}Ce#4#n=(3c>^MWTqlBdaA2&-BSJs!6e zI$WP!CV-QsKG)}Ux8XEClhTgRpMA>8qLlVhPt9}-z3book+{TPip3TGDklGVnK1ys zP!(}OHX5WaBZleZX-CGmscSYJTR;$#$azJ#xLa6TTRG1Vn31Ly#7nvi6(%J`h8zJh zV5%eL-Ko=8-IL$|>ar-ELz=}cBhA)I*YF=OcKJmJp+w;U z%`75$Ws4Q}!0YAR?CK9#AmHX!DwrMe>-G~lenG}Y-AY{m4@L5eQCheqDW2TYmtX7& zD6$O(Hg1OvQ}7@~Q!*41lit{Hh$Pd38 z995kf>MnTE5ane8Kzy81T^3{n9x`MeC7}w4o!ur8wH$%D001O5K-$jB2KLQ_UjW60 zo^fyI1ej)3gDU2T9@UZnU9_+$7tkUb`ISxue*rXdh%$F|j*|z$Xb{E^6nY(n0@W+Z&dr0kJMGUKI%Fa@c zPmkyK$MsRESrc_oOk@6MQpLH6psveh()<2pfzk=GtGQZIVsX*-C|%ho$Xk+jca*9k-7@zUfXD z)ESY(x+5fgE3P{!hY_6aJUqoN=EnIlsz9ZpPhAbVSnltFZHVE0<6H?8mS(m&^x@9e z%hB5?ylR6AD;9%VYjm)^^6|`(_wx@VvGZiF5x+v#av9+2buRTuA%EPuZ!p(owVegJ ztya$l-cggZ8`zdn?@K13wBhI>!q}F$*d%zTQ_;)%w&_W`Wo3O^ z*Ams%65Qd?ced2lQu23`;}PAN_npm4C0;uf+SAtcc$Wm=5|XQ!1UD%?=2sb2q=OSN zqFL7Q95;exI<-p~U31ETa#{dHthnATtl*HRj4@|5RBASzZ>ge2g!-?zhUDUkz(AXi zkg%({Hi4W8W?p>s474szx%JY{M4=6|m-`=pY(m<9!|WIKP>EtQK*4Nayf9ZzA59V$ z`l=yK^A7%&Ul8jQY6Knt#&Ry{*-y(_jRNBvJCl^cA<;^?bK?5e@j}C7N4b_2c^FL3 zm=Rj-PGgnx7m+AmLnsr*o9c%fXYC!B|Iw&vE)=tE71xJS@uhzb*&HgxbEeIPpPVC& zW;^umWlL5GZ5RAC$0r1@FX|)cT+i}6e*3iq$;-`Y+<3ftW|z9~L$mZdnn!198=R+j zbzaAv@Li6Jp+RNNVy~X_;wqU2hQI3%VoN=HEz>wSnxo)kMa4<27zlL2EMZxMyd5PC zG!9i_F%8#2#C6Vp(U?q^(LVkvlQ4eZ4oQX9E%K>%$St*uLx?QH%#vhX6wf5(#TKQf zxRh}2xdLW&wuIMXE;2wuC3Em7Ya(b+RwU^KP2NI0H%S8ZI%^UFgH;q6p?8@oZsSmb z!Jj%QJF6o$Fw7!i=oX^ZQzg$#?r4ZcZ*S-jb#blm_xyAE?NsUcT`IwPZ7K%cpWgQZ zp&q2dXx1s>9FV%qyo#>^tfQq$;U|+T5|5NgX^24lIkt9t{}kDkC17Q^Qwq42A)15ohEuq>>nZtMZ+~^bm{6AI7`3TXm#pIh=N&| zTw5YJ5ya*hDAff4kcwRm4+fMFxC@eU9-}_6j2a8?2aLgJR+x1p-e()fOJEg_?V%i0 z?bqO-yj0a8EKsb;1lEDsaAoh)n}$=LPv{@=G6ZzKzPKg-ktV}^>Rot*-bObokL&l# zw~%|kT_jvBy(I!2;dPTj*4b_%jA_vo+V$zj3<~?{!=N5h4B272i-cf5R)R&(?*{=; zCz8iTP+=lIA4`|Es3a5gf(;fpCcoDQ!6i>qVHvLh=1Ly7A)sjcc`0O>$fTfgLZ5#| zDr)?U0-|Kxb=|8FP%xIh-2EsDQ&D|WsN4gCJ&scmvEIxnTv*$kRY-&{E$g(3LyzKA zi`c4PS6Dh^1%WIFM4fBQPXi+Y!VQ^!0p%w%NATEznI9c;;Y(vB=@`rGzA)r!Y>(3! zlbc>;Mi@1HRtypy8I3k?p0cq(GI3A=$eO1i8RVURBV0}O&QE)fOSR{l*UdcJ zMdi&Xox9WV`tX43gcA&o=t_@^%|Tz+Qxo138|u#{=c`Ky>04EZ`z1dawCskAE{PBZ zT8Rt2?=ZWfheB5(ul*>^Y`ZcazeVs;1D8*?~oYqnQL;-tgxwW+ILQ=*(BqYYW^G4Q1< z?^OBiZ<|t#fa|@vs=(FZ0=8|TsL*f4<_9U`x8=8secbO^CERMnD+669U~zOq0^Dag zS{a2Lr->4K9u7V99!$AC$Z*KOq*GxovB~w}zEG}b^Y!{F+7r*^$HDzzFF86hwdL8u z`)r8~&Qeapn72NXHOYaY3^Z9)&C4d_pG>hAbiH>MQw!U+&uov&w4dmy3-1y&bTQKG zc(cEL)LDg{=%^;eN0hL@TBSWQsm`e2`1Y1e%o=;&u zV^MNLXp*8tykl{>>&s5Z%Gdo>#y=LS$l}cmA$9aQLdZV^Q}Elf$s+QIe#uM;Db}1h zfvFDKk$RJL)C=!dw&o>77SaWY#M6j@=%cvW?Gs*pa zn-#UNO0?@(5=GI}1E`3jfrCWgUARLUf>XGXYJw3C4=5wBh9=)1{S1(r;VZqXudYzn z2A(RV=Zt?ht=;e8JeZT$NCZ4tozqT+v1t^K=rtQP16gkID^b*9Jt+026_qvq(#g{! z4Gc>(+9V%TT;~-3+mnTcB;oC9!&@h_TIL|&JS9E>Dq#qYj&Q}10@RnIh_-l=X(|d7 z?Y5%sPhbE}wm3!i;fJ_)NRy`Djsd@WueW!yGqRyBQXpP=pyWI*=GscmeTUn=so6U9 zwySYpeu`@{1w7Ja-^&#PKB+;%UnloXpPpT&xgcI71u&=Okk+4#;P$jHb?CQJ7mvYa3ECZo-bWbw-k#%onL1> z&4I>0IZ}_^)GL~8lTp!&)H4*%L!f3UObe?Z{I%eVx} zT=6}PT%Kp%x2B(^ima@9ef)^BW0=FMEBjVcE;0==7Ldeqx#c%ahCgz!-FEk6TS!t_}L3Htc5|Q>w>XU(9Z=|i19O#@R+PuF` z7j3cu`{VkZOXuw6C(H)hP0otm=d8YHgd`St4@`>V?tqxDseORa3_Sl`%rGLU` zI0+xa6NxwEuhlgFCqO$pu`JgcFAfRK+}YcZ9O4G6GO*E#Sd3WyA|LLIvfaU_GpH z+{i6l_R5pmRn0q<>9aj{;%)~kmqH`{BquMRkGmBEgzij=lnN9c)CILxzbP`4KI`^o z#1JVLT22P}Ik$!)UP-y6#~=wQW58&iN|XZE-Eo8unoIB!PXqU%+pmH=q^6G}z?dqC zPdOrCu<<}(>hchFD{G`2;S~s{C_q@pD7La9h^NhjJ0c>B>NjPjD8I`xWwx^VZI1>d zP9Ef&dU6*$R}dT0l}c2Cc29L0qb}mZGgXpc{DTE(NnSpJmJlndBNiGAq`YnjVqXYF zao|`{%v_Drm$b$O{#C(Ck3*GvGf9)h0phAOVwNCF1Zz(g$pp|a>MKR#4>Tg$&J|Mu zW}5dQMKX{{2^vy32p~U ze>gVXXn#v*y$)XcE$PhHFz%k!q%f8o$2p;~k~jnhjtn8d=bvohr0!y!_W#<2fVs7X zp5_r`QE$q!&()$qmitGap;+r94+SbEz&F#UH}7nd8%`v>cC8Vj8e=1biM4 zGK&qv=?is62N+wJd0{Cc6%a#+a||j?vnC-0g$5EPlmf<9ONxawa5E(&OH)WU#8=YM zz(`KG5MOUjf&GNoOTx#e&KO$lOgF`gc;y1rZqmko^az1H6auQ0Ga3k?ITmH#BhTVM z`HcmR+O$o_=JGO{$T5BI-*}Q|KLQ_IxebpE8>~(YIv*UMQbOslk%Gf9hg1|`{0?+Z zbu2kYstu`BljP1t*t(=t&Rl|$BXRfynM<~tt*BgnvP)3RmK_frCaP2;6bBVp$dq|} zZj50NWwuEj<b2gb&wDpkwF1MIz1Yn{IRAx3XEkGrclzIHLyh{$=SbuP1{r+m!ES)<}8RdE(|2Q!2=vHnQ!`vyy zPfa~UYH08?FaqDIjy(a5;gpt?RKN!t{0D(u$E5cAefEfPWblabrcz3{Q-x#tH@{h5 z`>}uh{oZ@GrzTL#jDFgF_6YEanZO9t zb*eIzoUQy5LTV&qv+$6(O5`ayCa~1FlpT}mzrc!Nfk{Pe&;^%3Kv;*xJWR!aKMWB$ z7F4%4(wtMDVr|zVb3y1~a}A}UaRMBl#Uihq+pJbf*b+A&61)ya6plMis(=!n8MQ4j zZui?79a+LMApn95G%btQJS%BA%!btbTa?fFef9{hdQR`-FS^%%?LPRjzjmSjw|n~V zNvBMhvYw79sZ$(>shUY)n!u46OQf{jlH0Hwv#7-_=0VjR5qjio54wF>)8AehYWj>; z+F2#DEW~Vr4INRNvSyisQjP~}jBypisyt{)<+7o2vkr6U;lUk5I;9e5>ugFdEriWP ztKE`$GR|Lezg8Lx*2U)B^~JGS3wvPR6Ur@2cEYt0-I z1`_ID7f@mpI%w>+&n&$Ce}E*u8JX?6$dTBn+}Z-O7@>2kK=NovtB;+oadZMB%8hJ_ zHS=TfAW9R{cjQuUZ_)t|!%gEzesj9=_v>G~=Wq4C|8U|2*A(^ZhGX_&<57(P$qkYZ z#R1bFs)G0l&KasPk3Riu4#o)y}c(;8y{#rbY%#&;5v4SCLtPD}j|*1cwZ^)DM|Kj=SrzmkW|%TS(q zmtnP7qPM{gx1CT`)s$ZsSg?bNY`>;Rfq(CQd*#tvcjXlP$C3?P&FU_vi1sE8k7*Vf9QV zcnilpWUduSb9`pwEn%lXgFsv1q&nx1kr`1F%W;{t452AY zo2HezWxRRx@Nwf{=tol6Xk-pY(>JtVzK~q3vEB2(bnpHw*?DsEx-xYGO1j0&&#Y5C z&qS)~bjvGwPG?ou+bgxP(+PAcw-V{95?>N13O&IR$eNP&tOJMXqEs3GkXk?SI+3wkEla>#S#1s{EQqWRsMVlCU>k zR!&5l)N&=U#LE_!l;ujLwlF{s23*{T2KK_d&^DX{@PrY3GGY0AF_l-F^D>>2tn=h>WQ#qB^2w_*7a2N3dpd z33gO9aWE&@E%`tgzHgEZg(>VTrDz!LHJn7?v9BFJd2}9T$->FA^BOc$nH7}B#1yub zA}r?Nl{dD&y~QhH6F{2}*dpnyYJIP=I|jYE7NzDGG|zp=->UI2@!L$45#2D&G@0|j zSmF1zquKq@V)pL6&6_W8e*E9tx9&fD@0P@g5U&~}X3-powSn~6>{>*4juZtk$y*>a z=;qd~_ck}K?Xm;*)&0{mlX`U?EKFx+4(~c=2u|0T8e;b>%Yv2?2ItGEG{rklR*^CW z^CfgN-TRymravm4`2o*+de#Sj^$`UtWD30Qv4%SG*>S{x3^O2)nvU3kGyKePo?THr6mqRlc2~D+xR8r!h|>d1 zI0;Wvoa0~Ev@Nr>+R%|8mnhYWL@q_RE+OTB#YG2JnQ(m5O)Qd2iR>ViH;QUBVKT&^ z+Og+n=bzMGAW@4%0Z+1e>i9x)wPO9s=Iej#ezF0s1bI@3;uXI8X8pnczTW-(mudC? zcj*^J{oU*9Q2#FREU-EzE?1L)P4gQl`3G1&^$dCei30ZG$gmtdOFx|Z61pOrMo-8O zWmwDTj09N*Y2EgdSRo}9CjazcrQRC7fKJ<$gG0LkI8yLKjt$u;JOLwy^6!Kc%LI6( z5Cct9HUn>VvL);Al<$7>RMZB0yS0m{i%F{Fk|-B!3Mww&>o8f{;= zxGTee;G0d^EVOdMJxzRmv?nwK?z1gBtuKY`_>5QsKf4lp#*R1jD`v%MW6hQQB}fZ{o`%NsLbNze z{dlk^RkiXFGrB|Zu(dp%#S>H6m7Je>O0VRWW7vL>TBlBsG!E8(nw zeJqtz+U?s{H-G(AW?{L$&Moy@8((x^{R40J!}o4I{LTBjY>jt{y{u zWh5UVW)mh+@O$_*s*nvlM9(aS(B-*IN-#tg-!cw;+6^eO3JwW6`*WJR>C381b)`6d z+f7z2$;jloQqEI!kWya>Y!Wsr;G)rLRT<@F%iwrSG+wC`$4g7ef|J~7wK15LVl!#v zI!3cXoB*ayvogFWwiQcYN-{bnPX<$-Qz)*M5;F8GLpMS&`>CQ^M%6LABo-V^Wp&p< zIM}t-vDB0dsvZPet*}9}W%-3Fkb$|R-p>}@|J09F!FF3V#c2hWN46-#L-lU9Ls?Vy zAhu&5&K(BfVx*B;35v^0id|Y(9%bNmPkzvY4)(oOU1MTh9!&+5oS0%A*^Tre<^$*9SIz(v^Sqtc3 z2@$azb#M@PY%8y#TylJ_L zH1RxX4#f(1YBN$6k1-Pu%F-e6Tk^zDgYabpZNngXg|r$B^NWtxk_}a?K+~0~jO!!8 zl%$juDoE~mg>V-s!6B}fCTbQH_Mz2QffN|(E%we!#CILLqohD&#n_S2W_#d91*jU8 zvJ#ewDNT9Rk3X;S>K92AsMzjEa9y^M~ z1}h|zwiOEprn37P@kp2HD3XkUrSsLWjkYk$t6_as={ol`)bU6b37DI%`c6o)yV^0h z8-$XiFFf$C`^}~9TW{AMlAK9*T1=-%3Dk<>HK3vaC#{q&!(nnfacjKMi;t2{N0{nOrV{8-)hzNm;ig4h` zo^F6O6|t#DnHrSUdOjq!9w$*NP%k6&RX;hHhGWZo;t55(Zzd5XDC=?`U5{%Sr~{t? zwjWm!9U7h@@*)tjt3i!;NfBupPNX_SETCCXgl1%ysT;nck2MfmC{9b@uTUP@$7ko% z!3!tVu`f+cH2{;S(3_sR{=`(~j3Bkd8#H2#?V8NaDE@jSD!Zx`I+w(Ht_pQMKPM#0T{Yv9!O$ z05XmYpSn4NP9rTJlBv{0cFn^*(5a=vxi(*Wr~Ag8(IH$tH>fbL146hoHvo>t^cti& zi`b=zctK3~HRb5e?u{=uZ~U=);|_1&=8X;D?74q~De?K0EC%Dj-LLqSNAC)S>bAAG z6Zl|Y80fV0j`lOSQ}gwoF{oo|*@M8LBkY-Sf)Iso{K*FU#(A+@-@g6u=6{Ksr`<*J z(r~i_`;{b8#_hzC^SvxseBABVJ;Sa#Q^X8mKCyEPXFa>@87=^N+_I_MIKd67BP9}N zAOilpbhdN;)*+UMw60!bIHh0PFcrc`E34jm7x<5MhkGT8=Cwcpdziw(M-EeBrh%>I z3T54b3Vtl$F?jA1+o1Tsh+fS*;ZRRaXgx4^_mA?0;tqnLcI%6`yI+02ee2HVyLUGK z{O$;rT9GyxvidN2534O$(|Ya7;)u9v!3p$2BQjiU)dE*%Do|A#IAuJH;M1yGhMga@rnutBh34d;82Orv}@zcK7t(_ z91HJG7npwn1m(g|j8I(3zK+-|LJzWX&a>H2#2t=kXo-+cJ{_3higfGJsS z?e3VH9nUbC5JL~(IP~-j3Fse686^O&24n+@N~b3(7BFfWaEhFbK09$NbV#A0fZ<6G zWRJWDaXRsB$A^@F%2i|3g&w-%dsRm#;ATH40N`R|CFX#dnsI4ncQsD!ezt zSr=TLv{cOQ;B7ZMQQ+e_I>NwJNk>OCU3CL|kGhB;f0nP>KvgmJ&N2 zf%KVJZx4mwxxR?K?C?*CT%lZ4!+GMhYDhkEVmVF~B+D9>qc}^D4B>}EbH0x(wlrlB zqdA2b?LZ7^%7vn}*ozb5XH2!Qn4Vn73Gn_Y_WoI&7d{wQ#yIre*WD|Bda&^a{>r<>W`gh$Y(!eq+n^31H$sibB6(?_%r35vwrqa-O81p| z!vQc`=e029jQ#1lii#MoiD_HgzrC_sdfqTq&RP{9F`iMTg*T#`p{(DJ2#O#;T_JY~ zmX)vX9bE|0XaFbe`%ip=gB; zLN_5-Z|D+OII!rj4dWM!y6A-1KtjykqM_m1jMkXMf~?b6)jXinoMapeYf}}^Z4!4B zzP{}zp=?I#0^}}xSO^4qNZSMil&^=d=f&bI107TA!7(!0;oFndJqiS7r`iM2H6I&| zr;z=$ho$H!S*j8p;ySIE7}&0Y-7*rA_)N@TF|?&}?3DV}taQ+99V;CNO-#nN-xjug zt8Ho}=#x0<&nJ+FB3WhyBp224+#rIdy=UlT8I^Xg2S#$ViWXWn_SyCkPug}-mMlTk z_o!i-*x{9Wjiubip6#KJZw=Xm^F5K}+luO}3enpjT)A3#!nNM#@$eB|j^9Ry#k*@B z8)H}@5u2gHgkN?%o%kKl%&|+sie1H)h_bzuBG~%uFP!*F_Pi{kuNuLyH8i(&o>9AZ zlGbApf3jfzg=^ekm6L9!$y&LW+QP|axCN01q73A8&*{g3GP3QMN}R!4_bwNo@H@Y097;*7oFE&#bGmApyPxCh?HXpKtUpviV0>`OTYR=1Bmbo8k7Y9t&H zq9|2`HNF$c6UPhw2Z^k`LC^{08Q}z{gNtYuxmAm}vi6i-MM5GTya}i=02S!)k$5IT$#HeX;bQ_Pp@mXu|Rj zKHPl$lkWPj>tH3%B@a9YX{?0-O|=89+(xYv(75S&*^NuxI}n;%v<#B;+}MyhLEFJJ zyrT{hFw9#OAwGuXIg+bF1zO1*Tu}~2>Q==mAri*d!gEK5Owrz{(pE5hQT4@Hkpo^r zh2QuNmA6ALo0k??MCI_KrnH^?bQg$h;=YkZQNot)ro*);jN4pxwltkPitT8TmP2=H zpyWlOXdb0YO|v-tCCX%VO1d??%&3L;0T^E5PV|&CZ)JTE z&16Hf7~8;9$S{_H<*9?Kz=64>Q^SXUl?(Byf;U3uIJ&oH#Okdje@A zZuT`Bn^IH_UCWMd*j36I>i7eW?sc=u`4sMGv*0i)AMv;O!3HE5dE@4YSih{q^!Os- zNk-D@pdp%(#2pCtQwnfSu}{p3GIs01X7hH8`Ehkq|Sq#htB_uwB+5_ zd0ae?hnLM($q$uEd9S0y*Nn90EJTF$Oz-SUH8UkY0}_4H`6<(byH~gGU)#R9{^0H_ zTlc(zf~6?%vzzBS$TKR_es9LqpeCTMQzLL_hiQBzvZG zMOcGM0yVwDKCNL{4u98t0OWW2pDcAs-9!Bhx25N@|Mtd!*z*;`faZzItHOe%@&}I8 z4HtrT4Akjq*2}c3nNsLO*XBM)MI)3tmuq}|dDV+<9o?bR=nhS3EpwSr*G*zJ)4FHC zDShNa{Tb-%o)gvoMq>hU%V%q4wd@|w2pT^sk-7&u z3=XqX&l~}VHeXC2Rric*M0P%W=#a;VZJ2914^SC0Km2yYhLCQUCZR)$>q~H6`(eds zuiEb_&>hu2)5ob&`&<#L+h|H=2DAY=eXO`XT2QA}vaL67cYpJ%+Ig9m$9+UQj-NS{ zs!UC8mAk&a_5SCDZBA-}&L~V!Cb5Q$qul-|F++imd`N$$%9jqwdID?o=pNFfI?HII zVZwB!fgy5K(4S<~IYBq79VTL#VCBiCm1d-#%7kfjL0gLrx`bcTH(&cAwcotay|(_~ z-aWROgU@fNQKQDsQ|R%-lWmx|&o8)5_Iki$^3h`=SGd{VAt(7G+HrnxAf;o0uMj^f z7(tI&(yLY3FuPYj+5XkHa*HYUQ*+0GVV{{@;G3UHe62t&W1gPq>z?ZFDwE?3>osY^ z>1c)csGkvGvC(8bsS$(1GLmsgDwD-N{OIM)SFb^?hxgxMT5-nP$o|`F&qz%e-a4B!=ZOZ9uBhe)^+k3-$1^DY3j*J{`St*s1Nsj_Y=) z{R)2#ZgLx?%F6C>r1ZCXiq?8fx@PMnJTt^iRbfY_B(3_J5YV9_tKVOiJ&y5|<^HI( zQY>G_DqLe#y_P&)QU4p`_;FhJ4_;2DB*#Njc6 zhQxLCf23m?jHmp<*hJ0a30O>{NCf1Uh+l`Y{eW#1Z4yJ!8*qe1Y=KQZpoDVjAF3<1 zllc9u&o9+N*1`_)ML>F??(sB!CV;p*l6n9MK=Brg&AK8ArUC(5T&o4G#ho%Dy}%!T zdP3+^ruzn7$o_b2@Ant{1;jI!NHoDj3jc$zHJ}LkAAPztdBb zrGL}k{zEg5O&vHmeemGS{{7Q4kFmQmlZPJDCU^8rYkmn#NKJceEjjNPoy4enZq)t1 z(%^mPA;CAn?Jq41V_ho*bXtub()( zFhQ8Eu?BXV-jEsFmlZmHboPa#&&@3?o;bd6cJbNcC*}^1^$jl{bSrn9Ezbq&%>2m| zP&^xj9;^bThvv_mK6Y;QESy?pZ7OcPICo~@_~}!J$I?djik&+#cXWZZfVFyTPpIU- zQS(1D7cKTW3SYw~rvkrg)d@sTfS_E9`4N?I*ED>iKFVKyuIfAI;a;5){8Lz>a3j8k-0 z3l(t6)&1H9Lim*0*>NW5&aBP zQ-T7F(iH_*;5z1-x-@2U%M7XREAUjQ6Ke%QoXSc(QkGak^w=bvhm?OQJqE`Fl@3CX zZ;GgnVFi+TaYUFj@nLf!+LTWgjZ0ItqftFxSTq!fz_N2yywj-alD?MU2V6Dnn1s~X z4P?f>QkWXflyh8jq*F2=z>QKvfQK>@0Mg;qJ^ow2t%q)6vn>fC%Do4V3^R%Irblcu zl3DqfE709DiFe;w{s3n1Mc1cM{^`Q|B5Tjf@{iQ1Asi8Fk3fSLd$$ZN7 z;mAnKSgeJhj7Dic0}x5E(C^7ZN9qC6(Y32V^CK zCnoH6$%%mYuxu!OfnOYHDNVsruDR)xd5k>TMp{wN_Z06e+A*L}xeF}bk^y|umifdJ zctaoC;fIvy=PkUt99vvL4xkS=u0P!P zgb#|^VF%^qY02>3yo1$z|D%q7wI9lmsdOaEz0QX?k7YrCJ%J+`2)KRe%7_s)P%_p> zxxb!W=cAmh2z72&d;ntntMO}L13&+l?0@)2c@W_Hf9k;gLwo)ID1Mm!=eHKqoh4>4;QRl;UN3wjo|}2q9B!Nc=y0-`d``k)%7H@hdR2y^6htD9MiFiKCpAZ8_1dENLY<$(-3N z9}sAgZQ^D$AdzzP-%nLH0D?E^ZDkTqa?B^ONZ_sN>RWa7rK)>_e*5u7e~#D1Jdu&D zp9Ukf{5X(#Uh?ySbgms|mQ#m|V>p;({*)i?j)lmaigb7-)A~CfyzC9LqW(>~X~)sT zm1^82)p+mTJ$L`;wc8a%V1~)CyS3HhU;-j{=`B-mFCy)mq~0J(vusM=iOnvbTXen1 z-T04#v*W|Pm-~nRvEgWrFZaJYIGW?Rz17plCp1ge#3Cv3sk^aO6T6qP7`a-ZlJH`K z(hNw`D>oNm^L?0<=JZ_qN%K8bx>1;qfvwWtdD>Fmq&`#{iQS@@?!DdHYX9E)XKVIr zN0ogp3wPr@Ps=`OtPvF{$AI&^Z#P=Pw+if3pPh33R+*U{^j}>ii}wGMFQ0w&dHnx9KHofGe|^`_hibQD zEOGUi<7M(d)|2t@vCIBmT=S1fd+@mQ*rfr^e5r!m&>PZHeqZSD1m8SxOd|?qzT2V3 zveIzuI43{tza-uF`rvf8qbC`vn@t3-Cv_a7A^Ft|&vs2*xkFES(^Ad*= zf(@QB9Ps7Hi4dU(IbT|Z8cwOPD|8~+REx1mqlG@ZS!3R(GU3!K6J)^B@V$p$G%voW zi?k)d!-oXwDS0K_Z+G3NkG8jVo<4f?cuaLe`L0Us+NoA@7K>tr=&BDTO$G;QlU_JQE(AMxxa$eS1$$SQu-8_w|qk%W{Plk*?H7uDynyZ`23Q$OS3zKlYbJEd@_epirlg>j^npJbw{DRSw9cmm$X(HMWpFO3A8+&`to^I5StMr&Fcgx+6Ti4zC zM`u&}0u*0V`r%>KU$`KN(Ld^5UY+&hQtJGyF%Qh41YP;`lxyB#XHB>gw~>xo^S@Jb zc0Cbsps6CIu26V=Z8r;-#B$lF7I7KrhmCC9!P=a3h72nr+WokF-KD>6_~W_kw8Z64 z(-T&<7oz^9Ryo!0Ym?KeahRORB#26mQB4YRx5IO39%4I{R-P%-=G$X;rXZVdk7sqc z+kAUGtIOTy+e}~YwiP!EB?r`A-Bor<9Ivu>wrs=3{MAE++Yl^vB zv95kdIWvgw0u+ajn2TkGAR-^++5S6RO*ld z58}{`$Mj>MTrZ_8Rmn9n)nNC3>MY&=SoJFEH>a-mpRV_VyFodxn#VOwfzAn34J6ky zLQfZhm(hq;s5ZZuR@`j~(0<-V*Q3Tfwtl)Gr%sZqs;Pu)=cYPsvb&J|y2XELBkU7? zK>NRn!E(1WZn6Kjzk0f8|L<(?Jo#+@{~n)t2RP>@e>lhQ`$Zv@7x)R48OJBnv5OrY zeZrafzd5rA5&U)J^kow2f4neJN(AOM5Qn;Z!j6^VY znqUf!4vygH)o`a-6ZcqCdqKzw$1#BroI0?9(+X7J$czkl65FXF5IA*20jG)(;LJS! zopC>Oj3w%{J@=fJm%hVZ_YR5l)Alz1G1r3fH_90QDX7Gqc^^E7z3Lp}C+9>L@s4A> z@SV!5-l=bzch-4swqK+}njtN@nmU!syR+c>?#z4AJI1r!F`nwqg6Fx@c#=Ey&6~P~ z)jvW(P(H}qJjtSI^Ib(Ua~fAQr|~U!8eegTw4IZyX%aY<1E8b)xbIiORzKJqz?pOP zbC&(s79Z6v;f`t5jklj;oVOj`Zgbcp+hGrDXXah$RL;|mc7}G!J^}|ve7ZO=>I1)04%QmJlom+tp9(H&po#etNL21v3tM< zl5>xy0BAgGK)B&;>vVW+T_U8+$>ioK_Nbo?C#=2LBVfU+DHXVr7jo3%QsegH% z{=LijW$vT0AnlO2Wa)~0zKB)zZYC!$-(2xbzW(CwDd~4#3i;j$P~o_Uc$bSf&Wqi8 z;qj%)`sr@m&v|A@YCP9V6>ojM>D+zE^?1q}H*~H2G}nksB}p=c!$H`XTFh zuAe9(0^RzunracRpC3c^(7BLug>1XxhZGQS7BOQP5uU#4- zy4n^oYffI~cH^Yzl2+Aof-bKpl13+u=L93((&H10H(-c<_LKhYi>xP-i%ptjtRd2q z4U&h3f5$1(G8ma%JVI7Fx3)PPDslIlZ`}RkH}1D5gi$LGhoQ#eO^Z})dK?DhT+2d}E{$47bTfqL zqe6P@4Yg@TvCT`e166n2PbZt&M~Y07yU>SaoGme^ifxg}%EZ=TS2EVKX}wJ6#{>0< zw97zFTr>QdTS%(!p6*CA&lhCf`IlpNLvOu)d~>#YO#gSj?p(Vc??2hye!lg$zrAqv z4La`qEvm7O$-ZXOp_y~*=Zm{@@)lTmFDlvfvurH8f$tSLjb~lz9c0Cl67BN!KlD5h zIZe)6`JvK4$sAq2+LoHTTMqk9FWguX1tVWApY?kA0s% z>+Qc*(A8g^#*Oyh&eqmfPZsC@TRS^XKihx5$LHqwpJg$q;(u!ALAC4vTe*&MtDy-_ z(V4A`xBN@LjmZS?SI2W(30xb2XUX$)r8Kjk#JyVt^ZR+>`C*tQUJzs}UBc%HvNYsb z@wylV^I%>Qh%@;r%MRi!+JXp#zH*atkQD1f6Ra*YOE}Nm;S7`39AM?I0 zU+A_vB-X9;yrl9glGlr4w&aDMlo^}+I1QDni0B7Sp))3vaLsMTtBI&KG@a*XcPkIF zPJUfsu8qdDn!4J{%afG>s#epaQ8>E|2qoeb$XIxTG6MSi0@1KUy8Z%DEJC?DM%|5M zg}_=#x+YZ33YfW8k0*#$1S&0as8d!XkTx}7Y&Lz1kFq%jW;L^kp`l2D$eD}$J=fv<@Gy9OQlYNS_>ENI5hl^)qw zR24RwsXXZ2GNNJqXm!)Vgs4w&t>!Gk@s3wP06FHiN^J3-IeZSZ{E<|$H_BGWrdt8c zLlmh*umeJ`BxW>@eIRkdtq$Tl591vLuxv}d^Y*TdV)Fc1Z*7~H)!M|ak|#EG%vrsw z_$El(+F8QNjnCU9T0;n`RjQ7(BzU!iWleCmWWb@s4}dX*K(G**1X{C(p)A870!9lB zgIT71GKBmrqq!wjD}B2Y(cO~E!j)GH+(rW@cInH)_l5=O?}AM?fJP!}l2ND-k@9a0 z3cCVsVmew7Wxza^K&Z%hR`5m`(r0QY&iZm)WYg71lrc?EB~9sZB+3|=R@@K)bP-q} zHAN_xVVNKegkjBXhZq`J+~RXGDW5RFph(&bLo=_jpmJ}p=xl*c{~-FCVX(kA1=L=L z<<+JPYKAisTY1n@yzocJ0K_nlZ<~}EQiK|Aa_NoIOQdqzBzzhuQN7hc|5wownpaU_ z{4njm$0|+3Ey{9z@ZWjx%{LS+VFCThC|!V&FgHe75`axiQ-M%GdG}GZt@Mw9j30J%VhO&%&T-s>NJH5a- zR3l*_N^u3kP?q|Ts9&V<>Tvd}&^pL6untwBX-Xz0NW<4~z0u8E=`aCUDH?op*zQ#n zI&cRHwkh-GU@l6)M}-jM#-Mqh1jX`6#@vrR*#<0blwTNE66qI25qn&ZDB3>MOGma9SYq{(g}U zl(+V-p0!}K50z@#Pmu;6K$&qAR0I zBxq86rh*8;K{bfdGW7VkpA8n4r7Q|WGgd%vs0v^(YNPEW;k7#}uqAsCod)9!DsTgY z*$$BkClt&uN^>iNt2vUQZn)HC4T)DB21iJ4xM6V(6wPub0kfD}3=x>jfg^ z1)TM1UMf%d3X!tG(y$8H&n>*IFyNwCn*h?EGkhF=X@yUU2pQaF1d7xoKoRzlLrjeF zhEN_g6f18HHS>FvLg?LX-Wf$&{~X-Yr*;6MQGiH7DA<6|V61~{==!@$7r@eAbF<|t z99qV5FyH`37!ovc8Yn76EZGAX*_jUG+(+hx2Is9iyR`&QfQ@?gT@U>NIGBoD5W7gB zVqblLfoREAXtd(epr58=FDya}v?`{N@Fs{>H;2+akx|ygvMft zH*qH{pr{x#0#Ft}L+VqXX!?u=lfLmn(REmy`NisMZ&%?^rV%=>)kwJ5iqX0YrB?z` zfiKdi)O*xC8o~C1n20z7me~ysm1P1Q-Ow<&*fbbUA3C{Ua3E9c#1Eq^7=k9D&FU7% zV0n z8BQ=aGlN6@PyAQ{Qz;FDSzZE-l~E|eAn=BRG%xf`owuU_6+A=^9TEtYFzh3aBZPuo zh!~3|KK3#>>6Zgwb*2SI*^5M~R7d1Mz-bVbVh44qA~?-9!8MLH8WjFJksh3YFt|L@ zNEVdEV9o8o>)`AukV6y&cBrNT!g3ol>h6XJ0PjEz-y>;~Xh;)g7@98cd4ezwr{i&e zB7Omi8^DWE295T94YtT)b%4l2odSoDcVtp#L!?494i(pcRSX>iBXogSRR-s+xnO=J z78KW<$n_-k-Be}9x%rM{aFW~zQ5@W)3>p+66ZrsKMwnq?QDzjNGRlTfV__JY!(2cp z86i%&41*I+2fz}ihQTZ|M8^>dt|7)&>!t{reGXwosL^Q77>hPU9V8URp%N%w@0lQM zD62(0i)XBP%*0jvH-Fu5RVcK zLlf6nurV{(qns&ZL8%3Xi?>ArieDx)kRcH>YNRL7A+MnT;g{I%&*%~hs$g(%;$&-i z!xC7)lRH&RVNVFs4bV~G84V^5P0T!T5u+PRb8s{Xs1RE*nE`NGq)5sPL#52f0tUuG zgM*ox;L99f7|;zA7P#OYdZ^M2 z5@rlnnq8e;C_e=KcpO zFk1g&3TpToY020wv+@$%Rn}0nSmG3Eh=f8D=eXp+jv(QnQ!ECDC(hvNPCo#j_kkHO zqu}ru8jRK{W5Jv;6g{gD`TPULq0&Y^=tNxs!JI|N)?XANYg&v#Q-y|1MxhL$o#+VP ziYDa%#hhXs;^o4)JQzvDU3G@F5LT%Y+3IbeIBO!1fmxhKDvb!DF>=h6k!h0lvC=b8 z3#m08S#oHBarS|q^hKVV09JMs7HPmZE2hv)uYuaK#{J-#L`V9zfWqpsA;86NBJqOo z7&-k~BW>ise1aL8rvcV|G}1x_$Q!4*>dOL(%Yd9W(J(KV049%t;>{=QW4eQIHhJ>Y z2Q+=J07oE#g0?b)N09F#BV({wV>F(Cjs_**!<04LjyZUcS;K*CMUIb;YGPrfiUkyP ztpZxGH5V(PzVS?jfbEUGq1VQ6Rh0SmzCK7CI1jI8q z@Ky01T3TapC>1g@A>;tleuTqi9R|P>jmBXPwhh!m1Z*3uMp`fym}O5m3#LhmOr&ch znV1(o*5zAxOK~jW(6S(dQ{;RV1GAw=c65p z2%JAf@R5B2$NnUiNeHrT&=v`ht?Tq!dNHUimj9GvapOo_(sYQa z3&L42RoLOP28y%h2!K7@1k2E669!tehRkY}B?~0qGy`oo5n5&(ISuR2HP}L!@sO=5 z49geBU`TM-$!vz542g+ha28B2Ka@14B3@u^G@d~2b0`fADh542&wWf5j-3 z0^10bAt!BXqzz-lfujOiu$4n4hS*B4ipjJOpmQ{gP9u;l0WAau_euzdX&nYyC2s>( zJ-*ljT!>*fhhm1Vm8$SEv_U7<6sim{Evt$U@?0b+-yM%cU}&Iti5I>~wsE8dV{nFD z*vzd9fyCLXfHrL5Jr)DCU_J7&=>!99CclM*8~|&ig~aU75EUV&lr6j;2wf&*5atpz z_8PQJ0+$lGIlF;cuvXx5Y^ku8Pq?_8fWoRiWVK@HfB(;?-tlX zo)SEtbwR@erjIq!!t^qD?C5#}k8JjHFC@5%$Ux5zp`b1`-1>&5nh-t6TH`Iw*R=3; z)I2y0-Wu{tv&3ahALf#3j9vLfKEO_`u4Hgm`D^kt6zI8vRph@i`yWJH-j&v3PPK}< zNOK>YbgU-_!++k)13qzZ1CL=;s$WqLH5+{2={6>ms~ig5b~CRi9m3m`H?WDZD?Dyy zl7sv7H?X)<@s2Mro3u@1*|G3JNyDLge`<6DIoZ_c1YCu@^aJE-s2T}I_GP%B`EM{5 z;K8sN+@cg)M6gA2nFM3ZG}1_%@lV^>{EToo)5-H^XbYU+N0}y;N11*KVTp#6XxWukhl2(ox(~B2g*gBRj*w`gBGCia#STf01FG z)HP-&8z3r5I?Pkd`@eyrtkno`PiGX&FhzFd2n90)%^_uT#;HVlQt5kOXyXQor*DBY zR)7r_WquJOs+CYE!wIq&IDvzK5foa4XBg@$%*lhfxq1qLaCWGfdxb0(UBM>~2pP*n zqHHmis38;sg&3n{82d7UPD4~c3%0<@riQ^R$AG?O6wHt&iohx#<1+dVw6i!+9N5?b ziOL#6!Cy2CWhstNQ}6h5eQ{hMupVZ-=f0K6Trz}7re$c_oK#B$l)~c z`AiFP!&;35(@%JpB!`aQHBgv!nJZ+xsDP;TR>MIlLaBmh08SJEFvZX?G-<-7G{@s8 z)*{DTLfAuACCE{*8VMI$jfaIVkd+#P!Q0nYOj(ANbX(0zP@T*&zu>I#1M5vG%vU!!L0I;c`{gnhCU?+* z_2sQtwq|gfBoJ$kfhrvo=@_YIBu+pAhX_c@*bfRsy%->@jVd^{Y{6)x78nL*EDgi= zDKP0ZIFxB7l78g#!fq~+ZR3WZ80Er8uEk`E{W8*Xqfkt+naPYON{6XcD!GV+k6ik6 zOe6;)V3G|3x1IPLW!?8JUjjWD0S@5=y zT*FNeJ}?0!BB;Sxh@mWiHf)iD<`vNM)j0E!v92btsu%pwd5s>6X@KlE)OfsAF&YiL zXz*YkCLpRIYPe0AL|!%y6tZj0_=^k}dn=%g)C|X^zEGDEiVE5S7c~1w2g$a#y)hDVsse%%)aW8F5r@SL@j@U_ zFOUP8(F(+FVK}LZ9{o&;9_Fu`!A=ewR2PXD%{uuK#=(h0ebOdSZx%>!Zd@bLZrl7I4ot&Jch~LB# ziH%tMlj5D$5(kN5m%BTX-6_ep{#fw;$Z)xu@Q%qQav-4LaV6cI54t(lxTtN*?VV_9d2w0EuaU-joz@Quu14pQgyyfbMX!wgO`c!o}6b_uScTrUV}@( z3j{XFoO28R-p>=f@Y^I-N$I69@4vC2Jxe53Ny%7v-^){Et6+h^CYhh!9-1zT_P-f{ zZ8AUR67S|S0yG&pyuwg0!$e>gNY_Y|v7Xy&FjO3EI6NrN5utK{;bkfy$~KzDDK@97 zkSOCclEIYS%+UGBJOQ2zHtp3oE2iL5Y6Z^5k+0oGk;SrQ8d$Q7W5aksW&y@rh-x(E zxLc!Pv7u7Q;7w_bMH5%WKmuneDf!oqK~X!H)uga zln0{`H1WK9NeSHU@<5yQW=_?l{lh=MUf3NL3J?<1>~H9qZQrcI4kX@aiMw@FeR8v`eb;0uRZ6juE= zLSr1Z2<*gxgZZ^+uqZAq0?h4pM!?RVY^`4Bn3AyR>nN z%uhn(qKF2MZ79@eX;CuS)Grhgi+x6bT~0N_^9i4`Gh{u#Az@_(1=^aCl#si_3_tM; z#7m(j$TMWuv<4T-N{gvrBtmow-q1)r{}q0YSnKmtG%=I0ys{WCh|s1_C{dJ|Elq*VZZuTJK<++dA)paI^$oo{D{f_c|S3&v>@O}#u#ffh*c2yqECI9LX(Wf>gGl=7op0RdwQF9ypBc^mq;Gx z=@iYk`zfGo7w8H<9}4K`sS-(uZTZwlxWvq$RXG~t1TcHlo2h}~tdXn5)$j>=r%eMz zB^bt$hsL{Wfl>A&vO>`SR|X8>a_UYoA4S39Yb;XW0_AAA*HDyol4@&B8);a zHI4ZeKBSJOiiXL;mx;*XdY!6)LVI$9g+*6y8!Mq`uN8V&gq z)nIIu-k=NEJ#~gxA$&Ti@Uc@=1_w$)79#{g*#$^O0@Nfcf-EeNDOv@@+4e4JVwpjn z!EN*%5&&E0Zd|QRiuiOju@E3+9mPTm`ga%Q^rX!RPRBA_6KBffq)~7kfeS z8l)v-4;xy`1X&=|FjRmm%p0IOaR6FGWpafanb0s$&@xLek>*&cel9|3fkXvReNeyG zNSLw6V`zW3Mp`gd^jmm&035d{6>><4QE2*92p+igcp+m?BqKiwkQUBp*owH239w4Q zC@^38exJ(`GTCmRC~HNQA5s7s2Qs}JA{H;BP=+IkY-ws3$};nNs?4%T20pS=t{~%;QD{@T!dH&2kVUd9 z1*^3y%C|-86?%)nzw?d9%~MCiCO6 zFGR>UutsSaV%~HO4gYfo5(VvXHY8&KU6o?W4m|^5&_=bvrhJ=7Oo|+sxVA`8FxK^L z?wo=yu~H+6UPuGNK=Hy<4V29wGb6Yi+nnFM9cmHLAKvXmFa?PSrYj~HbQv&eagPd% z=^l{VAVW?L_!3!d&?iOF5xbvDRu$k135R<`vC!TMTHY2rHR$#WeE*KkaxHYL4Lgbs zi6NqaqA)`OpUbpB?pA|$JnfGZg2zO#t)U9PoC_2^_Q*fFQ0w&;if=YA19biXhCOCjBJ5sZ>FN{3P?LTo;E4~uZq-PziH?$JMg+jRG$ z$kk-Z&4pIQ;U=@Inw1;LKqN|pZkdGivlt2YZ5jEAdvbQ@UhHV>-_z0!=uxQz0i<&I z?hC%@*YyLknnRfk-6GYryb_~aKM7sZR5a{K(pPReSkE{1r*7Kk^Ixt{G})BVZKUfL zUo)6LJj#FF?N%~x2B`|7%`_iw21!@b5XlaM&%Zx7bI*?7od39Yy6@8WlhflL4qorS zc8`zTy(71?cScV;?#sQigR{r(j|b=9AHO?y34OYEbbhdZ<{rNx+~3{*Iyid$*xjf1 z`={>yPba7QXY}rr(>Qp0a(J*$Zx4=M9lm>gaP*z~l6V{)pSy<#Zx7BXvGZg4dE^}& zy*Z`V`)~J;&L6vP_fKDaPpRy^JUBc!|2uJW-yEE~Z|Luyd$Mtu;hs+7rb?U#cA{TY;rz79t@e|4ODf9>{V((U_d}*i1_c=bUL7C3 zIry%#7CO&PLk!}?=vSoy@ddqn{qnos>x0wI4Y)v;2{U)S;d=2lCvmj!R+Gzt`wx1) zN7dPJcX!=RH92>Ge!(@BG{ZzZCX#`2y;IlwPuDvq@m()+z0mdEr;#LUJxZwydF;G= z>FJB`!nCM=M>K2XGbQwhSR|>}_s6dH150$ef4IMQw%9pzothwdJbvQpe@Rq7^pw03?$hdt zKESSTZE~qGL`9m*A|>IAicGjPDWx*+ihu$L}yZ`oY zq`-r`13-6+oinw|IFI+*tO=%6JX|i!f+M{4wBK-0;Sxjd$ zT(+ERXTF=$sGNj;9?tdjKSY-}JKsBcy?6Th&)F|@HK=qn<(Z`Gl~DfwR6S~C{eH@B zwXVR|_AOp5oaJzVECrxEx~`6m7`DDR7h?`^j%X7e}-O+%#PRQ`j6b}Z>Y-O zs9aYLxi^fwci* zfqxQRP+9h$HNl_6{I}Ete;`HhTbTcMR0H#(+^hr=QOHCU*k04WNO2$SpC25Zo&QPu zgRX%!hV*jI|0F}{sw%x(`QFw+))e8|4id==5mbAzuIV55vRo_05cl|K#Qn5v4<`shbUqPL>HvU!@W!1Z?r<-Ht z&XTCQ7%3jUs;$gJt<*WpaP*Xea1REJYl*LOEGUQ=Ih0Lg`EGG~ByOOey>@Y{8^IUxb*EA$1k3}ebPg~wpFrLSU9zD{M^mVLu zm$TQYMCfoOd!)u=KQQAct9154r*B!F^8HiX&<+pCl6f_M)WFMy?yWR&VF=9-&JK=` zuA8w%V~RLi=rNw>CqAE=^gTZx?shmu)*$+GkFsXa$SH^b8ji(21RzaPDr)zE@Is35ay zT#>7_ptgW>AZqJgTk*CU{>_%1DzTdrYVn*Ec`%Kz;uA zll^M#fRFJmuZK|@=F~8=Se)^1%`d+#a;%ONu4Y=FH(bxRntpSsHdR8L?^=dEp6+mJ zn^9%^E;TB*nWZ%;FO|H0?|uvNt0GIRV`pBk=EioVUVSX*U-Hu7Ji3~|n5B(+L6GNx zW+t<=IYqDPHnY3cw)K*<=nW+4*j~?UY)#A9)hj}t$IIlDDjTr73(5Ewq$2b}@h|S2 z;k|vm!3D3a%uQZ#br#nR^{PU%q@b6-=JNJ%adE*c;#_fdG@V|;nQL6Ss7cevq!i7= zsx37fnpu-((ln~h|2(?idAQVGbt|94bB(c(o6STDNjm2;*sUbLckj{W^}JM_pYCgj z={`TnXV0H?OeL;c-CiN+t$ANar8(_qnU2mxotXy@HXmKjzt(weSgevp*Y>P&)Ro{} zx}E=R3fk@dKlZK!9O~`;kKNd1Ng_jJnQUXvl0Au%%AR#5`#Ok}?BXgaaYK>hB3dXU zM9NaKF9|JImQ;4qCH-fH8METot>1lq&;NdVo{aDJeBbk)_k7;-F6TW13iFrr@I$y8 z5ValBc+-e36eGo-4FaF4w#dY?w;#+W5P@UV&tu3UX9SLgf>0Qe5DG#vfQ(qY5lxU^ z2e@Lh;GktjY;j2AgAm!vDdJLEg$}~eLFg9HWovQ@<%{YKG-#`N;83@IcMd+Oo2{0s4?8-VKSlChc`#~0T6 zkd#=_50b#dj2r<@RZ`$2#+3xF^;vU5H^3)aUTZSCVP=UkyxavL+K6$CdhoXu0mTMU zWxzuy)~{F}*V6+`)*0>5Ao@bC3LY>bqCw69n$guP&}v@+&b}BDXorTBp8yMRaPx!0 zmfN{`I@q~^R&LoixIM4zcIpR zKy9ZW+Dbw_j!7VXih`v@MbQq)Dmhd}9Pa7n4_n(mL1u~JzAKwe#Hwf{(XIyu4Itz$ zBuLoGLl}hkCknz9!RlnJRw^SFCDg`;2S^wZTC6ebQ^Gq1y$HvMQDFoD$RhAW126gjEOvOgOjQflLRe;6S*0HU{ese8-OD=4s|(|7L|DiRuzxT;pBv0a+|kQX96=Z^wk9R$T2B%DK^(lCJwe2%o&=#Di9?5<6JgG(y(|*=W7I z2zDc6$d94CR&oT@Xq^lRRvVPRMo1WyA6oB7`VS_Jh<1pbn8A69%FGb9|HVEFE(^HU zkc6Xx%zvzHEsi^Y#N9-RhXfmOJqUaceCT1P|JFhuy4`vJ#A}DdAa)mP!4U6TVAtyb z3yeg2AcjX`hpT@al0>`3MkRg&6flXt^^37dz{vj!Jn{Sk3_>@S5EU0+GbM`l^mRZ2 zRx2^|Nh=97!ZDBiSNu_AAui!vv^S}SOusJkYqQo`iydH+4g`O3n2F_4Z6eF$PckXkhozUN1YfipHzL^7);1hJ zl2O_4((@~Xg4-bxq2SrIb)r)e^Nl`&_S4ND!uFwp=nWb$n94BCH`dLe+x>bXHoUgl>h5}NeSS0)6+h=P?!u7lLtggH9>OPn=~H+GVU2e!=R zS{@kwh}LzaTWW<@Xm>0-ryub+Mq)c-;~9pI8bw-02M zuY#N$iTYpEgwk&Q{{c**`_M`)uDHQURV?Cpz<=1s+V$TG z5Cv%&-1&#d$U^@8{{R2VWweiik{v(|phbM<2Q+{`az~H>0Ae%%02_do+)~Ta!x!e^ zYjZfz3kE-m+S$pZBp1m5kpI(+|9kzj*S$;6_t!|V=zP&z)Os(j-&d$kEB869Zj;zS zwW|BV?%In9svic%FUvYd81(|&<%akJ7qi2$_CBcDRts?%g2-_TC8R>W(p?eqHIkZ57_nmDj}nL^!o$_ zv-)NuU}KLN<)nh8uI2GCJNbIba;JmOWIrCb+0yZ}y9<0Pf2W-2#ddibMfaq^O%|sH zhsrOpkiW3nyw|c-Kp|-9I!|^7d?Kq{MbEV#$m(UOUaF$;xtEvujNk}GhWD7ZSz}%2q{fPhnRoZ_q*m`Bfo6SS`kGBGBfO?wZz)s%nzH})WcywZ{ckK6p0Ov3jp#h)wQp0k)Q@ETG-del zx==&iOFPgvP2PdLot{!l$JABr@(OZ69xpg@hFIp=i#>ZarYpLYpYK1X5?a35Kk9|R zlRiFJeS1!neVuXW=?dO z1wO`<+f!*TW|iD$Bw|Xw=MT$F7eri)H-AJyOkL)M>c5#HY@HxA0KfyFB}0ClgXFT# zAbcD@cZAtP+B>xVkRkMk?4O>$fBI@n?B7o=%@R3ocrw~>yk8<`o{iI^BSL%A_6fiZ z5X(imbWr0*pqps&*dx?Q8o} zar&J=gNQa->E1BdK}_lm^qwB>r3)S?Xup>*kug|CnZ>p}U@R?8%xlmfvLS@q za&T9xrpWzEF2kJq@7wQhnui39b$9=<%UdvhD|xu4bTIeVHsL}lff9xw(5*`?f!`v$ zrkRZwES(<4eT&q!r21Sx=VxlGnm*utRHC|+mzS11m)`y@8@ZH*;b(T28}#p932Wxb zow9SvYJzF2iPq0P4z;xjj;)Y515Rfczms+&N)sUnmUuX zD0=$c)gt-}Af1CVuK8RZE)>7@7dbXx?d~sn{$}xut~oTXJP%mt>-$97gU>D?=HhhN zVU=Bw^s_vZ=cH1a^aD*2g_cJ2u5{}zExi1`Wb-K3a1eIOcu4398OsIvBZo?_Zx=dh zn(Zck7CZ?v*(yn&Cg$p+!8iQA&`^S%@?1$LRL&Frir0TCD+f~N%006gdPD5yS+2Lw zg03~tNmkc|HZg?e5%^+EC93Qov9eRrZ*i8j}b zap?nqhx(g}`(aMep>Y0PpR^ij!<LV@J^%Q)7T67g-WbaVWJKpqYQ# zjaEWee8Z`S%G8T|x6YJ5gNBsLnG9Z5WHD`W7 zsw@0PWBTV7_K775Xe@*a9Mifl+-W4mSE=G+V$`?cD90%u!%Z+w#{QR8K%jP7@PU@! zSv1HUM2uCx3+4l;6LSH7)%bVt#aWFspRSv!)ZXeyK0D^kJyIjH{bmS@+K7;btHKtC zQJ+XVrE{h;8l@*x+1OZzK~|T;cE&>Tf^~;G3w8CX8jP($@;-}^cSe`Ws)nyH7^Il_ z?WP+aEDw$AYL!|5P`)Y*AMAHOzN?=)$Xi|JYI~$ub4ajNQ1PwkvEtM4ncTyncl7uw zdzmjez)bSktf8_GGJRCScL0D&EU6h_r+AfFTPy2_Z(L=C1Hy08aXT4ZOlVg7Fw6Yu zJS5-PG}3 zfk)C|wE2JM`}Ll*j&;wzq3$Hdm_8;G$v<~2D!saLm4o1};gOaiM) zTlQ2R0rt}Pw+$sZYWqtzgd|naGLP1LoGvZzc+v9*bKbc)Ybg<}Z1xt;$ElCu$(XBOq-fl2CeAYkcdQF%b!DrxecN*V=H(Pn zY@Fc7IFo|`ej|ZgIX4=ecn7A-TfLv3$+Y*lyrc?OVs~Wb=dUeIKYL=pz`$OSvp#x= zOxFl-2Lw{GzCEcj_|7!w)xj6cS+f%tgc)}aUU;o(%do}MNb7jjz!X<#O)%%@EzYf7 z5Sp_k%4fDHTFbmre0|MXMmIa$*wL0oExvBR$uC6U`jM(62BB?QEfHr_%T3KSJ{2z( z2k$SqreUcg+8JSgv*mp;cjuQAW$&t>Rju7hOl7J}3VtsdLVWWM(J;0HbX`ks7@78{ z#M8Su#EEQ%UA%rBsAHt&$w0n^Az;ThUD{(l#@Z9fvO|BcnV#t7&Yya3c8n$Yn)KHX zPde=$j_iKp$#huLAE^Mhkb)`>U%Eb^-xnW|z6zsM$G16DjmH@d~+Q$|!JaC5+L zctXd=@Pc3wxAYmtIJvU?O5Nc^ji)Z93R>#pNg`)vRn%$@exUT*lMqi6O+}L#>n&b- zJbaG|tBl|X=8-GbY7UPVy+X~-wHNw3PxHXY!$lcM(O9_L7ZLir^2}#n>Gr5zEzkInmvD0=Jg{wK=Ig}!>g`ein+$=^Me_5mAEAl9EmLyJ zv?l7tE{-NUM>rq*a}Glq`=r6@^A9fTEd;v1wFL~%X>O@cZH_vb>K|U^+fznSFu^jw zquIUH=qhtMV`y7-S+hapsgU;p6MfMpObY=1FvS_)j3;!>pMvf%Fj(glUg0|ahHB&w z?>-Bkp3aW0W@q`@E-{GG!`kGECGYt3itgR=m05bQmbqYV0TJKho`43hcZ&1JYes!d9m6o3*e^4c9&DC^m}k}kTOz){a=mX5 zlM>Cd%e3^;8Gptva$X;(&o>ppitAlV`5wn`l*y6X){mYQNu;teYnOf-niocQ{yEpR zh>jEd-cn^dUW(3peB=PpadL%J-)W1S4iihh>)7YYf0HZhNt+;5QAxM8E|>k~0j0Kk zhH5hf>R;)kAiuwZ+@z?ZV01N_YL7V}7v%sRNhkMLN>b4?C=gU<5TDXXdbz{AAfC0$ zmhx@($s?f7kv|g!TvN_pZe^-u+{MWM7aLoXmtx<6a}OV>T;X|CdsNrT<3NUIa=%T! zM1h3OS&4K#y*PnG$*wB51-~+0nWvlIv{}%4yC<((&TW5R=wsL(FKQn)w)ckYQU_{P z_a^mE2pz4K<=|vsnN>GYnm2+yy}q5LO>3V8-5e*l?xy`m@D?zr_o76rexl;8!s!=1 zR|@vrGdZ`!o0W6RZZ4dx7PgbYB{gVY7;VepD6wK4^NTdo`!WFc!mZm>#x6{LW#F|Y6EJs${xjJnKX^T4@8W_K9-bGr#(Xr8~UW7I5MHwe^{MK`}YsY zrqcpZ6Vu`FXy%Vgi$&^eR?+?Hf8F>!JLvYPj!5+qx6AkcYwt|}sp`6bVMQqwN`o|A zBE&UMndiuudB||N7neJ^gPBssOpz&}q*BS4WY&brP?DrbGFPIcN##H1-fKwpJg4`4 z-sk_m|8KwVlY7otd+oK?UTf{O_V@|0k4$w`F?7a+@%8IV?wi4TraL4bB=03i z;8Q1-JXN$>KD~3@qmXVB$MBS6u2$!-U!c^Zy&vzddbs`inTqSV?1wIjzeqfyB7ds> z?NKIEwKmjc*7~S~XR6Q16T>0bIPG{nrdICQbF6V0CG%;~RnLvgt86|6r(g8s$y~f~ zh<8&wlD%Ik-|YC(WK*Zx?|P4np!Uh(MjM{*9OV?*7$;6XdNlj^bGynCa!R^zW$6~q z3X2nm!uQ~khRFMTWu7Put|BhJI!=1ZYsAGt68FFJxD=&gFEnxSbZfVkxyS{~F;0FW!*OPk+vd{`qp^4L zg%$kdZeZT7yrFHVfKX1n#blt6jd#Px+E!eYv}5J=+|a70**U)9Ks?j9eE4nDC8n!u z4p`pTeMNZla*$_@T7$4#_01P$73Xt{<+ORU`?Pptd2|`-P24}hY=jT(5W7H5*0*MD zdu{u|xgcq?bCCR-$krD*9492!E>E+-7>c{}r`^o;iRaY4`*7px^S9Q9EIwfFv+k&D zs%+Q$X}?RCyKIwm?;hUQ*DfCByiP5rv|Fy|Hfdc_>{_nWFm01mPcfcd$=y58ZZ9OK zU9R^plRobJrNN`k=l-Hj*Gn*MrB$axJ;k$=xxO z+97*YV7y%3RI~G*&5*NI37n-s!%8kJI5V|ixvyK^9g4++m%CYZ-tF7CdSqGcwa9h) ziCoT1<^#DByAR%IS)Kmy^2R}qGlQdg?t2Xy^jeS0RCYQ)xZpKPQD33^5T1*)K63+` zlun+%S~QhU_EGWIpCGpWoU3v?Ox`GhbYhPPJyd! z4V^8HPh_9P-`t^isd49F9m5CDBfD{N2+^(1x97%e%f75w^apZ-Nv zPWGkxhLc|F4WnUO?}>%J2?^rTyg&S`q^Kj5XLK~?{Tt_JZdJn8*&MpAg$IWuhZXeK zdbodd;m?;n@OF*Z)`p``9(k@hwMQec^p?{!vM|EbwXVl1>*^M5 zU0)h7a42;nXL(@Jsm@AC>&S=Iu+v+&7on;yobJ}q=rPGt*Q@tgVu0_DXuCtsyEOVb z*wUcdu8?PEt^J~o5VGmHh+7H6YTROd90uu(+jI7^rFvQ~y(s|;e{!HqtnEpFHcxZk zie7wFIea^DIQo{v&DE&&_#F3w6WQ0?8rV3+oCKPNLiZe7`qYuvCT0Jz?a1Q6lg zJ5Shq#JuTUde_|T`i8>28>987Sj5-xJHeb25A;4`(mMI+;Uf;c(nWq9UePPDTX^ob z$XrWZEp)8O_N6LEWPs-o*H}4z6W@dYyb{?7h-*sM1Ch&CTXbId|UJD8#(mD*X$Rr@4wdhfG97srCFl2(`OlM$#s3jLAIMW^u3a;Gc#Oy zj8|+5`?7qREGM~?aOlk^W8qy&^$eWD+gHHX6bU=7FwkkYlHc4EyBd>_m!iLObM&Xa zk~ZWHMOn58MDQZc`YnwNW;+rx4IJ;HU6eV_ihT*TQcSkf{%G}3OY7W$G5_Ve!fqIS zykyO3PWD>82e4h}u;rf@X)ZgyMvO8H9x~O6+QaoX4?M^UtwAz@LG`;NQ+A3X8w30L1k@M9G z#<-{v&U5>n*cM;v6yS)iPv~8FxvICHte6}b8^6IxEjn&RFL`N9#Cem-=*O++_FofI z|EBqCl2amc}3dfKWVY61+e8R!MrV@yab_(WpS-Z^{q8Y)SGcEAP({+{ITz>A1&T zYxAbOb*OM(;m59}RXx&CxA^+Qa%(zLtS;OoRyj=eu5Pf!p|*LMZK<}1IqQGE|El7r zH-<}>8oP!l4nDoiv6e(>`xg1;gHQdxH>ssMQHoqxc6>CIW?>? z7x~0w^h+1(j>dZq@p+6lE=vfnICxEUQVN!=u*K$Xc>KrO5R=U!1?@$%q zn#VnI*n{_!S`xo?BQM9XTRNE=#VvBQqj~+CUN^iV^N3zf&^Kh;BVVh=szpJua$YxF za@6Hv<4#?%;bhlm@zSNYZ1211K6%ND4YF%6H5K5&KIxF(##D2Dr_j!=dlzN%-TtU_ z*Nt+ddR3L>LC(F3)7;!02Q=dut+cnY?-~2Zv7*hfymRU(@4=7&!;nq;;{~mp%vXi! zZcuzu2ZO!iKlR?w(!-=ebRGYx`|IW2GA~N7US=Y$j%qtg$bB*K70VIDxn5k@$?9fd z1Y&icU_|SLhr*uD*u@Fy2}0IrpACh4|VK_QJ0MevK2*OSDP4~_`fnN@McoHyr#)sXHZ9L z@8H9aih)S(HTRuOjx-#&Dt<7>Z{RT|$x_RLdx>;iuY_1M;`oufBc4m+Eyo#8Y#A-qLeS2(7F18#oDpsyPpheo0YGOKP+r;<92%Oh??7 zHx>LDxRb@@g_C=F$!d1P!50d5+L~FPd9dP9FVT;md9ghV?wEO7+?O-FVb{nTgM(bX zsCzAYi($SU#qYy)1&ICw}0OpoBy=FDvOnZy-y8%#y_} zU+%}$FKR1(EcdNUDd0wQfJM0FWj9IALgB}%2bD@CLLMY$F?+wiXqT!QYL$W7d7+Tm z%=)V2D0_MwiP*Vg0}D*OH0|QxqSzaTnJ~F)xl0-R&feUqc+4Jq;cV895N1xbun6T9 z!Eo+XThc~W)VOJ9#2mD#-=CGcH5L`mxYV#VuWjF=b#l#(sHNLtW1kTjH;UTEczk?W zRBE_RI2pMwo;M?c{mvq@A>KXG;R%)uGGPtHi}kZ~wbnMBVsbi_%XE52l={}=M^h@+ zuQd-F7J~WM=c5*Rti>6GvtjwP_YS)s{upAFr@85<5&4mib;#iq?af=>q}fKT;buYj zIGb(R^W4<1r6c&5`LR6*&JtETaWSN<)!8n{G;aaV83+vkguf={`AOOV_jzY}HLr&+$ptAF*&mrgHN z?+*xEo!S&veO;kFDDh*xp7HMD*k`X-HcWl(-{@^?r6ht{%Nl&;*70sDqth(YzKJ=>n63PO;rWbeZq|B|A?E)i9D^=IAo)IiMi>-9?ur+eh+3uK1 z6uzSUWpyy4YP%q@7nRqjSbk$sc-v|QaV_j)i&N1nHy`G!?NPP=Ry|m#pd|LSY^EN$G$d4pt8+` zDd=X|9S*`xiN_j7+~`Z0o3?-HvNQ4EANN zQ#jp~b3J}NqXBn(rAJoTimn<}n-fz9I5Xu=J8fb(98yl4V$A5ia$&cC5W6yCck10J zMG5nw!g%IR1$l{W57mROrmGmgYxpwGFSCKXUN$s3Z<*+&UWP9jb#Jx&i_?zY=lN1w z$iB`)Nbh#QzMUiG$MpShK@y3}n0Tf?Ok+OwyzR6sx8W|8lN>viKCwaT?psg)`mKrC zZNZmc)xY_8=UteBg58Du3fGLb_xgU~g80Wfs!i%F`(z&SM2;X^FWDcnjq|@BwD?|r zd5Y4(7x^!g#rspwFHtXgjBy(DF^fEW_{EzoqW#&qlQH_%>m))4np;0bm!#TczO!Vx z&3RnqwQh*(noY{JYl?4kFD6(tT`0D(As&t|ge8|-yUL$I8n!i*I)c<7ZjR-#(Om%sX`kj<`)@i#4@#KUa7c1e>1?iLQ|`|?w(_o$kx0pWc33i8*$zIrylwWcbl_4R6mxZWP~OVAgj( zT8Clq)Fls($XkBcwi5#8+8XTxW)+1}%@1Wl+AoS#xSz=1xffm{oXGL&RABjQ;d3n^ zLhE#N+;PgT$0y1)ZLeAESr$7fRY%|+eBeU4`$b<|rGh8qaHx7$V}aI9ogJ2Tg^k5R z=_`_Da%A@{=^@LXAXQ{9$Cj6fEcIx^?TsmzB3{4qxc>RY!Ww-B`HV(&3si9{C6I+Uest3DRzfBXkTOtraoh0GF{2eF2B;Qyso13NJNt%K5Xd1iqOeK z4bF9=v5vx9*$+=X>RPO@Z979pY%{ug=BW|4 zN_d7Z$=|9!XS2!tK^+Q>eLR}6O2kC>{MkC2Te7u^+pKPz4fq-f?r@V_p|_-CpVIbq z94$BZox3&o+{IxH8liCwlp$j~g`) zCe%%ipUT^5@L2nkChlR)?Gd%RRSH}w#DwjfYNOW&zn;1C=9d2B)#>T_JKG7qC2L8; z%aziOzqxt-bkoHaCQZ>=8&S=5-WSVur8FkJ(9`liW+bZ3lXbY{!n%DXsIw(CN4jpw zZ;mwK={+XU@NnqMv!SxYVsCr%i@th6ImIWVi9-49>tYQatsinKN=S6D$z(TOasQnS2AjV=)0!)Tn;~26a!I^V z3;yAT8$wH3%%7U6-dyj}6+gL7tq5)2Q%pkfRiC;j-(mTp{1sC0LOn^Z6=lRdv-FS)r!}TXFcBYgZAXZf+TG>T5i-3xNv>P zr$U7$B74=%aKnyu0ebI| ztB_KtOP@S~%k|-_cQ9-Znl9;yvuSg9yF0t?VzJHj6vx$dTZSrgst zRm-31T=d)C;NdmBdDz%7%kerTfXAqFN6m1TKt~+&fUmvo=MFvJxJxxA`uT|~vTjpk zj%}JOf7mf`hS=nqd!c5ay^H8omn=BYS$-DN!Upzo&ha zGjW!djNkg&EAUFP4HNGVXX;?jT68|!7f8YG&CF~q+bb@0iQVeM*}=dGzOiA=^bc+a z(?~9qp0{f*`<1V(-NgaFD|#-J@Zhrb8)ED!QCHD(;;?)kiwF0H-OOyPQ)7pAUQVy9 z;Ig*4lGJS==zgH@x}sqT)D%@LQs1X<2G>xW(zv@pq@Z#ch$7_C_8W zwtb>MboiQ0fYi{6*cSBJ<;$4+NZ)*G_jhjNWn!D6?CL%Bx$uR$p5@!SpS~i}FDvhV zPto8BF5541c4}3g0fW<_ulmT26DK#^VO)}5b<&f95B>7;(FVu;lJ{2KTZg%1>~%IR z^L^fXCtU`wmA;NQ*1Z?592_^$7B=-i&{BVWYMk#LC8#1MYuhr;@o}Jf}`v=RG-cotH+;g@dUg?t=*vYq<0fuw|K*+PazLG z5`+hRC%qp%Olz_vOHB0`PCa=q7{c51Vr+bAe&&gYS7{Giw>iJ&E6m$9{c%_JwA1Qs zS9pi->9RjnySb>c^~np>pvS&G!VR}~>Q*X^zjl4PMpCaySX@E1Y5aoduHE@9FZSi5 zmbZv1O0LYER(Hh<2m2+XJ-+%nvA!}KKkNTl$@<1jb;avz0~#xq(iM7~jIXo$Icfj-WQGzgM(x5@Ma$ z{&0256OLiAf=HvvT6SgW!^_wY>kb`A^L!sYh`5q?P0Vg<;u58`TfrHJ;Pepk$Ah|e zQ|;Zfizs2Z#YgYTdy5+!k&Q>{R`M(5rI43gI&!O1aj|QXhXJ$8#qpi+Bq4c=*s)!! z9yRiXsg%f2nDkN?&$p$w8*B)(f8-kFpG0^c`^N>(8jq z3vbR!00_k_daT?r?dhwpbB-00PkIg+KW7k0h>=F%kC z<69M6;V+`UHQif&?Ss{0R>{psKmWn;x{sHPqQI8(5S5`Hjt8$32u# z%WG4%&Ss}t+O3}I9a$q))%sju7f!4x^#pL?qx?`t|=AF3iF5>R#GnAFAoyKF5C_Xd*+p7b!h1AgQ0oQ(RZR6$g%8JhM(XZ+uN^GiK5L=BFQ`PMjPXN(&%X`o4bG5uaG|B`ueXl>*XBpm}VV_6FuR+ zPjNzp|7np_)ER601Q)bt0q_^zTpT$4?R_`L=*GuNo@;iDs5UQdWz&>v&fV`8G}Zb( zJGc3Ra`^Spa7(WJK~GGCl5Ko%yN62T0a>}5@0XF>55&qD*S^a9=04OtcI8TGnyUz6 z%Ynkn?PZf4qv89*w5Y*oomrOu4W-y_RYO(Ms=4t z6{z02H1$3_`C(y6ePag~2pnUnTv7-V+1 zUk&S;;J*7T3DfhHp+vv0zm{vm-OG(n|gGP>zQU- zndLc{f2L1(%LgJk-T6yO2U^t4tu|lj^dPfq>6MmyI??V5dKy+-&+Aeq+V9cc1#$jGp1bBkNkf)sQ&0mX7s25=~+ZZZl(D123^WmjzdST76k7 zH!G|5V<^fBUgW#$^JDbJhc}Q`SH`}Tdk$_(MqHM93DvZW{0Z@P7SObb!x_ zRyU%8D>{4#h!4FT3Jy=l&M!@_@O=N}b+&>_V(Hk4fG;C; zqj_w8Ze&PP@5NT^+#k(e zu|{ufy4>?k6VR|_N^ggGah{4F8{e}{KlL4xc^$(ZaxGk~q}HeMQ-Sw6q5E>)#mg^g zkj!ka7Ae0mVn0UW-?U-6b0TTY;r9_zpPpw7IuyVxuMR&g*IoV6`pgS!FSmW=hxGWo zb>8cGEUPcR(T$JJy6ngFjv(}jTO_%bylOg~Y1MuNcXMAJK0vu{{U_>-Yf{k4FE_jQ zPlp?>ZsPPyyK?vSQ$L35h^D)t6UGPiD<*yWu6I7P6wWeTg!Nz6Hb&t6rmgpq&|k9I zv0VB_#ON+2m-JlMw=hW zL`}UODLB$5x-Ud9n{9TtM98n9N*USsC@s~Pt85T%smo4q7C@;!p&bao`wpwOqefT^3zLHTr-Lf*j9FR#7#=j?b?d?{IY^1|3qURig+!O*XlA3YqxnH$_;NI6zJrEpHE@s`cu zUcT|nPWRT57s@N9EeTocWCN7HZIu;z9i-MQQTVcD$S0`p%~zvmi%6V3D$DEHKk(R` zt^5>zG{$uLY0Z>!>YbQTP zE8C=leD)7L7j%<&C^rpoEU;yW`>E%^VIk z7Ejj)0HPbKURI|bUUSPx<1L{!*o~G=VNCua2Nlqrm!ntf?rgUUR;e@ zd{??uIYj5I=OC*=^Qkw{btl&!QuYp6Re!qtKuqOOnx%-!s&E<6?kxR1Uzj2e8cBV5|4Dz=6su(~Qwq z{J(1V_3Pg8$)lJRGfu?iWf*PaiArEHymL1uYDj$1F-47x28Vs_L4jLLnG1R_T~oNJ zZyH^G72{h64HcQ03X@nDtrNfFk?iTU^bPnkjSJmwoVH z%NktJM~%MznC>UCZU*d}QF-vvpuHF+M4|N7D6#WsNum4O#hUY?61n$23HsLEr_zN9 z@}GD!^5K9=xQ+7g6o<*w#E`KH_hi+%Pg0i@n_vzf-n{F|*d|V*n_qgD_pu>#ytQ)MuuXm7#%sK8HzLkTFd0_4v z-yXVi+d!z(a)Q^vVV`skj?C3N8g7WaD z#&*Cw-dsn`z_V=SO6N!QTUM3@WF2`Ee0PQXdjIsS>AO!azm_|U9I;d@zwd7GT3AHp z5%Rq4Vn&(La!!nMmwQavq2}fT*FK^w9`B!GpODKAjEP}zwQ%V^yE}XIy!DwgJ9poV zluMTz3g8zBk(5iwsV~HTYKz);>$3lzsm-wyIf_D+l>uGJM{tjN8KxGL4z?RRoI2e5kt1>Jgmo|)-p z>XVK;h`?uj2UxBfE^0T;6t(CL7C9`qEJ#ZE;1v}MI~OMPr6Er}4u4Hcuunig+^qn! zO9`3G{kUu7&?5u`zwbGOZ&`a7sGl&k66~jjEU$rLX+MMxwtvY!3Mfbi{ zxwpoY7mZ~fz2ti0>vieR71gAxofo%NyOnjkRBGEL|9Poy!Nk2aFu9c0=C-Pj6UN7F z)z~&Qvz{p7qQDSk`c-gafm?MG9o ziJjZuy=ySMne()J%H-A;@eeFM2*D$(lPBXoUM%!rpvo+3<9oyb5DcE5(^j-u#(^-GS;8+e!m&7rjbDFlr;O?%rn<`E31& z8-oPP-GkGzg$3a%q!%=IIR;p85Q0X}1?qYA)Ut z+T$!AW~G~EW_E<4)v&q7&B_q77G0D+G$AJ{;5Sk^;q2djl;?ingv_HC=d;qB2cI{d z8W0hTbkMO(yS+=QPd;or%lv4(vn*@cp=f_gu~(E;wgmB zUha0si@Xf^`)+?U-jSy1e^X?ylEqfL7MJSt(Qk@kV;8}*u?>X1ua#UW^(~BtvJ;jY ztAwA5xfy^Kb_sbwS{q((b1|#PqA);Z-_7^?E?AE6yykpN8XzZxkVwv_$0eS*o3?-X z+T@dCPx_R+Se7WcWA~TDy>V||CH}zTD55P@!mExySczw&_bQ!TzM6W$d@`wpTRp5Q z;y-nd>!3=;^6*+=yQ`B{E#0>Kwxd!J!9&9F<%$=l@{t@Xj#g=2*wS*(G$}TH0u$v| zC+7XaOR%_;#1JCMztjWmoN>97x;4 zv3H5KL2HtX-lSI8#_QchorgFR`mc!zT3@+|EI)DijWjw!XyX>VyC8nFZb!kgGaH{i zH_zB{Pu~{SelOcQZYM2^Po-3cTsrDwHSqCus;ge5 z#Io&f3CFC1LpSij>L_gB3$SjT(KL>$~|tr^R!s=;#NlVmX=}8 zt<~9Enp!b|330A`UFq2-7`c}c_mVO)&|Ry0Vts_l)-?t^JS-n2-duGu=Zv{n-uV?+ zCH_+nx1CHX){zf;dR6+$yE|UdjEC&Z{fswA?Kw=y}RKv$4e&*DmcDqR* zbZFhAqTKyAIMWIj)2$J=6z(g+-`(T5CE&Ky^K3}c9#2jcF*fwB2t7eP=kqJg(z%{$ z%e3@Vp(NJm8nO6Bo-BRwbj9^h$ES)L8>Q~rit-n?i(}$kqa-yg)`oOTS(zo_Qg4tn zB>J!>$FvHSGTKRrTSqQ?ZMkwNBQiye^lYtCdAn=21(P(g40FDt?$K+$o88%mrxr=W zZ27xQA1z;DXd%sUZVm$idGoo;W)fE>)cy zj*Xe=W*68b{oD>QywGNEvmA-&b>F6fUcD}GZ;I`~_3JJ>msR)gxr*N9-$p#UE+1}v z(L4R@vt$>x0Pm8r(D0p`?*(;PgtG|y6^QSa$srURU(_(Fm}0+s(%pD@47b-xU$2zD zsp1Uc(bLwM%##vbnSoBd_7_{@xfWaBeN*9>-_`lZ<$Zux=`LZnA;-X@?yf^ts{^!8 zXrO|w-QFtr*!N}^0j);IkvFSl~%hy^NJxjwX*j!;x+pawK6ZScLL3a;_ zk8i%=!D|<*R=uU@=DrHMKZQti^1bmm&QdQ3EmyD1`6)Y6V!-fetkYq%!KrK|J_g2< z!y(R0UUe7i4u7iG&z8NDJ5ryr?V&x#ySj`~k$hErwbCX9Ij=V^KFd!@H)?V+=1pN9 zWpaC;*4ifRsN1CaGTEWfPWt4&lTQwLR_ECiPkm$6KwrdA79|^`NegTXye-C1eH@+F zcE2d`UX_84L(<#V;XQA!T{*!WV0HH$lC3-H=&K0a`z7!0I`p`SR8OQj*F~K@C!hEgu(TuBm3T=%) zM5P9C6x+66McvK0%-R%KUht8*w(nD*ZN7tl4?}TJS@hTG&w01E!M6uo5pRB5YAeaT zpZJaOQ~SG%&t>~9%QC`|%FnBeZwPx;KbL*j&*MIJUL+BkL}I7;h}_ z8?;-d(^Bi+)}Nd9**2gk`_jGj544(oIYc9&-9_e=C1#*~!dEVXb3RBi#>G zit~IO740=XR$q7{FP0t_kx;S5_cgy}Voolc|BhtHl7~r2tBTj~c`|l6W*@ltMc~fC zrMIeXHXiquoWAFh?1PnOeulL2aB8B~Irgh} zX6)C)(m7JGY&kub22)(OOgpT6TEV>G_*icJ{%^u}n2q!$3Lkqb6^cbR7EA?>>`MB4 zzq)qdONI)wd?H(B)(v#@!F3u(&hEHTS?CM1KH{8o%`~t3nAp{qH7Y72{!dS!KWT>T zc2VA|ahKT3#<~Of!SdNx;g>=CRoj@FmZn^2d}<`f*sb2(wN8xZv-64Z^r4Fp&mxB| zG%wo*+i78A;N$N8>KFaFs^NY9O&(&dX77?vz$ zU|2J=5z+;ZC*$zo{medC%*DiOhJ9k}VPisXSmVd?jxMegaK97Ga&r}YoT1*6E6S(7 zI3uh^>1YX>QOi7Q->W8{!Q(xdkJ?_!nri6{RB7L`l8CiFt?HDIh%Xw-dD6NrDuDe+ z6pI=Pb4IZ;Gvn(q8FVlw!=bmU#jobXByAMZC=?vBPrkEEMaD+{omEJY=8YnO60<6` zlnLGRo82iCfus*+BR=iByb?33bGCQr;W?EeA0p~|?n^exUI(2F!hszX6 znQ!ZO)c?F>Yg2}s+v7!X@h1w7>R+}9N=?1Fn|xXeBN-b%UgT16bJ?oO>nieT*LruP z^f2lxGroFWGT622;%MwyqwMY*FO%EtNAZO+23v8>Cw2@Ltxd+Aj34>B_+Dhn;kA1k zdE_V0ea-8{jQ49Aa9JetR25&3JP;eNH?(mRpWR8mqfbk|?5}_Rkw^^6{Nk})zGL6I zQ~B4w-MMkKU45SdMrgb<(Oa1dEBoHP#%#yxgJBi^>|0fGqxW0)r_`}7-^v;Ep7m!9 z{eGxQwgPDA=_L$vJ6=&Z}K^ccP>@d4b)ZXuIoRb_9=q>SzG;`=p^n(i6l`yRLBV~_!d9m>t?5Vt=8J? ze0s9+ld$1)9CFK^0i}V;4TbA7C*?>w8o3A7uOMqPrB$qxy~6UOoDi=yPTu1}>OTC-g$I8c$`047jRaOhiMh%!zRVR2b|NcktcR2@OW>Ys#E#t)@G5sBdl;h zo1?iH7}m`+G}#S>MbZ8hr*3bywu{;%yEahtol1nSw_>U5m!g}SUKM4ObQ-989ZlHX zx&5v{?#5&BRh2uK_Pn(cNIc8OwkomaT~^5|-h1k84wuk-($v4H^TjkIV~*W(Vbr_L z_3*RYhZn>4BRYM%_V>zhKVwI&Y%3WxYbj?{9f=5&i+S7<^HuHq2tz%BOI_XcftO3f zt_`IsU!Ey;Js01@&i-ET$w4gtU_i0C$fbCf7&6ix>4|Y1(c1XJ9Wrv5F z_>(0_{o8y(RRjKqv?;6(r|vv{ac9)D2A#(@F4Mep@yUc0y9^hdFu2DV%OrAuiA{2) z7h!EwsBEwx>QrZ51>=<+-x}j`_Uz;#tWax~$8!~3-f^3`aBmoY)o6fll{{Dfd)VzYPSWleDixdn#=6a`9{BC`c0eb-Tl+| zS^MS3>pJ4513rJOyK&dy+xXSRV@Sfe8y`Fma+V#8y-G=oh_qg+dgE1(^{WQAp{b=2hNBel3 zLf-JC6H~1=-Uu1KwdI!crrXulG7^hh%5ITEmM!_pF79%vJgs?UMM`MZqqZ77m&nK_ zIpsobZ`c|6;@xZqId^afxu)04zu)c!OBP`25V(?Xa*#Ei63?89)Bj))9ZjzF#rLq^ zad&_fyQX!PGMyR>N{<)UyyNSub(bT(W^b1zvU~rPVv&${b+U1DY>_2wzLZ7o-|HkzT1?ESWU@QwXSey7yKT-;8ij@67D zcW!<Te$PAe*SB`uN+X zHIE&4M5cvmX1fJ2E|&PO==I;Vz33@SEvv~C=Yah1 zK(bmeb+9BidE_#0N89ZZHFaCuj^)^m^Jo$j^=^tv$dV_k)DVW(2{LsWK9I1&V~3fq<0-tFI;tXuEHRxB5OK0g4cmH;CY zzf;~zG;Acn_RQlWB*pB0o7bID>7VZ(jjnf=dcMgf*}OGHq3C@LpOwY1*^#GFH@1uM zw!M;H8~k?Dx{X)aC2JyFA|$b%qS<9UmJ@kyUz|$2P94#Al2h4B7Qfqjq3UFIvxc}` zMw0ajBNxuwyw#KEr(CvoWlJcVC6&<$QCu?z5)PN7xA9e7`(cl{t-rKd_?5alW05akBofY^ zJLUW)ntiRx&Y?XgZB|fr4LYXvmXaDK73_^C4<$T#H^o;lSbpYg&-oUk^Wd zX)$*Ay_b^8a zyx8s?(!Iu)B)9o<^ONwj*!NZ?A(xH~?0fWZ*`)-_5Uk6?luD<~w%Hau7Tk9>W?Jv= zvcZe)pB`;SJa!Tc&f5~q^3d=l(FJ=3bM~mNEzUFM@rtL8OP{4hap`_sdt5i>=GXj< zDOI>5yh7@ciiZ21u;$sXI$^DF?QHd7PlG+zY-^JDAn$Z|m^}aHdW5~8C|7HJRablJ z?Uv`7jx5TAhdA9f*2gbSv@d<;Wn4VHmwhUYHGsJxNUMxl^+==@^OhSwH%mDs)=U;IH|P0xWNG7NWX4=n5DX|`;UoQ_TP zOKkR@+q2A-X{&XLadKRGNA``9Yo|i0k69OC4b}!O8O&?9@t_7=fkT`Z&hQcc_LK6B(Hj*XSvDO$WUIsQ;kcLRJp7&V6UuopBR&? zo*z^s?pSS?jwH!NHmErn=Y3+n+|%bJ?Om?5IO!P$AH=$YDTgsd-h1(#=WVe`#18Y? z5NWXi5CD_)jzuR#3asI{6dN$=#62oDQ2woj<~TYfQ1IAJ=^ZRI31$2C%1 zyHmaubl;xv3*S`pBKEXRKv?$V1D97muXpV|rDQ(5yeO-0FmRi^Mu4aRk>hz8;<=_a zFKK<`-s6%V7C({Y&fhkG?%8$s$W^cI8uHyEO>u$Fim$s)JPBR?Mp5=|%p0E-SC+** zu2PKHlHC!+zBH;SLbGPmrb~SdUR;|3CrJEnVjeH9|=x;-HT@u*{9W5Uv? z>%(eCLWA78LhpG`AaR=a1-xT))>ituHQ8?Vvv2J|y6UW58d~J_oHt}thNma*rQDV5 z2dRh3#wX-txFd%&COPA;F2_3a?eI+0s;@e8Y(seczC)_1oPD=hWLL#(Z8~&sd9?5G z-I@5OCw!mFWp2EET|nBRJz({~3TLlpj=PJBo~~cf^Cr5z@_?OAwC|y}1g!JZw~xHG zJD>JlkBZ%U_CR0i#=Bmt{mVZkt}XBD&nS%yJL&z!wXdP;*I#c%IEw+2Bpq6Yo!4R<+bp^ALd@(RnykT+#j;W1yMJ2tv| zwmYvAEfAXYYm;yY~p>0Up=R7oxH3E^5TsyNawC~AncYmUM zpij=R{k>Hwx88}M@Q}q{Ne4{*pY^|qu61yE$M1hD z%&lW0f{_7^XI)sL1#a8;5GAWWdUmhRJGWJHna};*I^s3=s(7Q=F{>LgMMGSI7%Vu2 zWu8f`D5FeRNq(p*N!eV2QnN6*T^Jj#n-CAL-=YzGHhy2%Vh4AGdQM!1u?|z;hWno_ zZTwf}EwQv^-sclH;nqGOb<`zXw?O$oNk6Ni6ym@QjKT|J0i&ZL_ubhzPb}qp&5*W1 zWoYT<+_g3bGBlTMH+^?9S*X@7yYvV}x8657ha-(V!17`eYiT1M`aZ$us1{>Ta;4VQrRN8t${1xy_xyS*a>UP^{5mmJ)3I&eRNM4V+gIII)8@-c1_l>j z1_rj-PMqwEp^XJJW$2Nf+*;i*cK(jH>YK#P$oNxROFc&5y2(!FU+#$vd{kr# zfV0+HFOg-^6gR~!P74!0-1ek%xUYHO>BQb68+c=MuA9hjQo0xLZZy~7+w`MTetv2J&2_Z4FdSiXr@b~_w>mEZL$6jRNuRTXix z%;%8`XI$KFuA`G#g#!|-BOdFMJ<`_S4^qiq&R;C$P7_Ulxprtx-Fz+ary}#LGY{oU3wRxW$Kf!V%u-k63gEPe7tM2He+s(2Ygb&Ar zLiG0F%9kCnJZW4CXLIFFov@Jl zn%d@8`L$AS1nZ}9>rUddiqbKibw?E|KCZbRGj8_{yXWSCnhi@MA5}(QVNMyWEpYVP zY&&Y17{S20BW`u^CxM&6g|}j!mP$764ovaSVwDQKz_>-ZJvcV=g=&Kl<>b*E`Fj&N z@<(od5oKGOv-<0)#jCe2HTL!tZjBhUI=HI2=;oR<=jH398rCd#i>+&I-5j+od)Ind zEdtB>$5r~QSI0-RPe`uH*VV>J7F#cQevzo~ z@Rj6yIagu7Ww?MQwDj$c3j2y%yT&N#$v2ow)F#&LlfG-})2?W=$YLTa{Ec=~N<)9B~;x(3VL*`V|TE;$R zpZdcG^Qy%sk6m>LJQd|Ig?=U|da#Yzs9I@~?5A_R#hLABG*8hjj!03-KB@N-;d`Fq zM{XR97k;Zz*>bJ|efnf(1gZGxIj!*UN6&rVWDad(%jLd3wdJ;xr~NHU<8GhejXA3( zh;JBIh38a!5FRJG3~N~5nusHw7s~tE8z#!ZRo1J=bbiN)ts&EX!x%={s!OZV3tBSy zdG9*E4EO>39*zhNBm%Nh+5fDdmKL12eh2Kgw~xX>{ydi~RyPaJkW9%+uBFe%}Zr+9TaC&)Og zLa$EaV6{hOQ@=Ckq2q*%BS-SB*0eU==dXkpqzr9Z^P=tDGonL5TPD8miTUa#%gN3l z4wB+iwDr1It1fjjV>V6ny|{f;=90J6;YLck@kg<`Hzl=2?}o$P^y2zP_nbobK4@FB zb;9S$fLBsiq2dU7dEBR}oHNmFVJJ(*svVtnx!cpppN#DKtkcI%H%7VlJ-p$y%LLmw zc#z-D{=u@OXHqNc+83WQtW7O?@?pi+N~Il#U#-=b>lCc+yAwOiQaCm;WYzR4^|WA| zWslOLw>A4TKio<0Nz%`_g5O7YF>Tzj&Oz?Xu2nX>+P-bb=d!L>j;(Hs+0v>o_GooA z$B`|qLLAo3dj)SBj$|Bv74cN}POPe{klglX#p_BMP(p5F33;$OKHF7RO91c`MlU9L zWA4RU&M{iBcrooX4lXx6sm?-s#U9LRR>p8+$W;&k0e`?G-HBU0G3jGw(Ym|;jxCSz24$6WZ`^?{l6N1*O z+ez0^}| z)$=ZpS2AW7xOu5NOuh=Kk$AjZKq-&2s?ck#4MO3Lfjg&*)%kA5cEhWCRxLL)VT`VP zz&;=>ty!+SietNlyUx`;qnYWWO#J5;)!Vs85RUX2V++^YU!) zwmQ$fNJyI3@l4qFnU=6YC@N`6-bplte=7l~Y!@Xj;T zFMSuz$ej0VH#z=*ksm1pko}X~beIJ5zeZ5zetYN4N6H@T`Q-Own?xPgU_Pmf*O1;6 zW<8fJi(z)*ncQ^xGtbGcH#^f}A_Bq_+%!-2Y&zqR!TaPw!MZ!sm(n+o{Z733Sl8O` zbFm-}`yjXYbzekx)b1$BU6Ik}VnQf9yqSHoYY4epY z4=-Tqy;kN{U*7S=g5ZT(?gu za0bB6d&%v3Ty+d}?SlSUam9_dq?)EJgyXL!d1I_va?ae2uZh3*Xm^-ib>qZ{Rm)W# zVJT6g+k;`ZCEZJ_F2rR&$?mZ`_YLE)MXt5&g5Z_MrM8`6IpL_52E7)AxNPG+lUAeC zU*28W|Mg>oqfnpo?OgQ3d+EbdGOrFl8JK)biZaUe)=8^=P(V@pSn|5mA?Mr1YGeJ) z)BMWIESGjIpZ*$N3(GJT^$hajFVUB3IGHjY9#r{R9yw5SX($FgQrFr$5UKc*x5sy9 zM;Q;&#`Y!Y^{yiL)dyn_yfkxbuXPsLSTyN%Os!zE9x zh_|rDy)SCNwC`W^vp`9BnWkXDVg`l-OQ^RsEJEU)jfr>yNz|D_BIB|2+Zz5HTn(g> z#75k4)wQZ0lE1L6&$UQyxvjm>PF71&n`^cTVmIsT19M7 zyDG9tgPCivB%?J4d{MKPI8WVha|t9oKA;rbjVgD#aLP+gJO0%zrUhkNCzPVH1>S3{nnH1%Iyk_< zZe4qNiJ^c0x`r>$yUprqc^F?!2W$x}*+d-ZW(~S=+%R#yrx>yZZQL%k%rUNQ-Q^DE zubxJ|>&`PH8Op?SxbEmow~%k$ZQR_ZX76YB^%!H|$MpNI6789MtZx_ZM_JYxsJE2d z!mD_m$nrVH*#4TsR!ZL)soD`i6lOZ8afoa4*q1^5Q~Y(C4Bp;hTw&q)K1IV_-<7g| zcZ7~XzqF%l*62eKS@m!6%{SYcq_bWLTfay;kzPA6F7fG>O$1*`lx#i5I!MAQf`KN7CS3bHj$^1%haC&9S zG@sA3ou`EkW6N|xFjrn?xC!+pn`CLj*P%^q9#;)qk z`%R;NdDsKpo#yOk&NH3k(9(e~F4{QtIIVtLarfCzALMk8u6Yp2S20oTUy+{C9D8aR ztD~?b@$mD#A&ZZgiHpdZzAH@&_ZBFO)zN0*Lmb{&=$7o@fHKQ5+vp>`=aA=S%rk@g zXU&XSAMVO?I9vublq8^u^;og@Bv};i(TorYr#1yoVu?&yiQ~EKSw;v>{w$@CSFwfF>X~I?>59>vV|@)d?VAU56QgeoD@Tu6cqY^zl{&2a^3&3w#pntyTP50qd3;jcw=09#{&nB?}A2@;o-dy%5sc z{I(;YpWssE`{A49;oZAVqcz9PB*#`^nLKqKu6}BG*+{gpQgzdrjaNO`IacO8-lTu| z1DndX@z-M4{7Vid8f+F{m2SwYE7$I2ovcq*TIJ0i{BEljH=kf9@&mV;d?)4<`wM3E zjtW$2*hfos-DPcwBTb81)GllpxR>J28=SgPHiYL$k!3~u>XQXi{julyVNn))H>2?S zPsUj`O0>UUYZSZ2`;11wZB2P{z*-@OrFZ$_)yjb% zPvxD**Lkgu^GbakCQ%O9C3$_^maX?+rhh79TwWP0kgkXq z&vINR8TTkY=23o}kCg|T@W27{w7u*uwPUU4-oLNPbQh)+-R5Ait~nK8?2^-9uyiC^ zef&-iVO_emN2wz78?#Ga2fDoVHQLITjP?nCW*~9aR`C_4Zr65J-sy@Gh+OfcY2{W| z?PofA=_HMtTkEcbh}I!ZTbv?Ek$0}8Ziao0f*sI{+3>MkY8v@8rLQ)uP9UbVQa_e| zze(@fCoz4OQg7DWC`Bf)d&$)Bu}`+$TsC14(YxcQ#rtALAE7n1qw6k(R*2L*Ws>@o z5IrE2{Em35XKGQY-y)eUIWbnLN%48XM@H?Bz%L=?!iAge+GqkOki|F5i zvaN@V183%@MBBZ%fHPfbgKYsAMVr8ononaY`-OJ5@CA0~E$cZJ`P^X#Y4dLcs&!=)0Nom{zQy3>@IU9bM{32Tcb6y4+OCm zHyqzNj*6)6?YC-5h(68R%on}owS4J{N1WBiVxQJ4HyYaL6t|<^If}ozJEdEoqEz+p z_DGCCHD6np(6Lh|!{Zxx%_T*K1V0lpw(#AOOun^IFbOGWBYDWMp}-;IqIP-0Lmx4R zwD^;PJ1^#G*Wlf*F^Magi!ZO+hgK6-d{HhM@vZD!?721TiURKF;W~mM-Y{I2`79{1 z^X@Jbey!cI9eKycJS+}oC!Bqj)LE97`MlJ`&jPJ=OuW!#uT0QELiy$8&$n#9cHTmJ zpp-cZtw6L8Q@Z-vFp+KPSKQLxhpP8lpOl-W>FXU}%kXgwtA_{Tr4uw&5$b!C+q>57 zJOT*c2f@j&t|q#!r)~Htbj{?ERHDW70XUHBM?v3*q!l&y}62({@8F*S!ena=!P`c<9m= z#<6#s7Ax=u1x^Kgn22Ij+vC6d@!38hk^J?=c6V5_8Q8AwI_Tm53YEC>y*ST`m7Qrg zlyCU=XJ5?N#yZw9q_H*`J2BSmjUrMQvMWmzTFi`{$eNHaNJuD@N(@?5_GtT&LDtA# zh?&RpJa7JQ|F7=jxbAn?aoqQLUf=I|eZJ>nLcD)#3`D^pn?l4p?V9FNZL=&7ofwQ* zw&!nG&s1TFhaMHrFBf)dIG6Y)HPlB?T)o?ZG)C;P26uFBW{fPhzN+V~E#O=CZ^gD$ ztl%Bo!nyXpj~VDAkysm3$!AN8yKbWT+OMDLJ&n3bdU!Qr@l#&PW=WSrb|XjT!DMFV zq1$uDuYb5to*;hMXg9Xk?wY!5^nufS?Z2HLuZ}@ipLzgI-x*EFnF%0hdyk*zgrzH_sV24`%WWk{{se(Uv_Z?1fw*b)88s*Ign(7oEYbABWI zi{x@fNV2=jZ|7>^Cz{XBu3UM$x%ThFGcC_!vWh_qo)f874NV)bLVUSZtjWTZb5c6` zSKt3Q?rS=k>bYI~_sIw8r{Dhzyp)vSDjCBq@qxdY-I=N2efZenh)R%@vEtZ&fwL0L zW(6JX;q&)e-UHSrlP+dvuB$Y4oiDXaxc<1#WJRjA16^^?V#xkLOq>Z1OIc{~J7>tD zcjDiqOq#+e_Vzjsp7 z&iH(aVyhiKBlG4#sd+olL&O!-Zr)`YwIq`}w#rz#q>)qa$KDY7d;r&Ph&P~bZqTX)N zfy3u`+&Q@_d7^%vt)o=+H?`ag)16&=D3`{8L!o`8b^e|OHzr@qKmS?1f75vw<*0gY zSNl%=BG*T5tZNA+=G=Rqq-gBv{aB#8EAU^88ud@N0;j8Yg5S6A#0~HP5fB7QY3)CM+l;-J@OiU_d7LSKTqko8G;DG}8F5(T1lMqEYMRhow z^X(AmR5z76azQ~{(85&k6~#(WK-#^ID*pY^kd-(T?%~W|aHIeTjc0YH+i!V!V4Pfo z4WYB>w(=|r08j*xA6h9+k}C$@umCB;<)>?6-V^Zo5Hofb(ch3SRk31C7lU3|4{mc! zID%d=w=4@MLb8(CDAR%D1i7Ad9I;@m$0x3>nsCog(BJSqRzB|Vi!|M7^O_jCDhAhB zc&lEicf{(y-jjXiDA=C1_R%MUqa(u!SZvn_+RHGgigi||;6+hQeGReq-08(dIQ&#WTap|OjX@1fp(JcTVZc1#es#^S#a~5dz+b7~ zU-%I(vKu6NUHe|!xpbfN%y3J1{5c8%!mGgX8U{&NY>*{MWT>QOH%VU{U6m8Zs1 z?&W0aI?-4stw|C(ce5&uUoa6@@e??dB@ln}edn9X&Syo09Fm|t;I6fdC2s1~pq22~ zOVn$CVYYdAIFQpy3F{xp_nGwb`qrHWF5INEFsP6D@7IgYNh{&h zbaSEGv*GD3EUZb%31y0qhTz){{&)Of&SAuenQ*o0prAK#1T>@$_!8qx4U^(ggb@vK z09dWQ6nuJaZi{>KJ9Hhjfr+jApgISD(DPaWX^5+mblpdLp8#CIt|Y?_nz-M`p@g>Wpa&>=@1nG$T|$p+VWFg>+Uzp~(n+U6xye-ADJ9+J!z?>ME;x1G@T_X}#irLR zz|A)*bh$pUz^i&J7Z10a@@q|P0KrKCS4!CIkYTQKUUHNuiQoJx)Ia=F*>a5k2lh%=qZO0g6*AJ3OU~UZj zbxsi78asYz-fbElwo%EG`i|*m0lu~SH&T4wX-)jd2(7MfVl;?h#Fb@s(~}v= zYXQS3<`C+sJaQIP;3=GQckamOy;@vT@3w=E|7J#2KvRBHyCskqnYHt_uqwGgPYr^# zeh0iu$`~moYc1@ek8{d$n}#!X&VGB_YyGFLu8-u)HQ=tmxuu*b*$57n)6W$X6U)s% z$L4;tx@pT<<8m`L-*LIqT(0ad?x$;K{T1wlPv8a$6h(#9=ob#j$cVb1l82Lm&#N7h zA*Y60K?L7-$F0lJld$Y(kDp@$sJEldfkTzlo~8-S^wHi(`j0|3@7D{WJfbG+bfBU& zh>$fa2z2KWfi0a33(%mVXnztDxI1uG4i^s>olkR2@bvi?!k#%i;i!8Ar&BG!{;M}9 z`fD=XL@ul;M6KmG+*__uAqOE74>4?58TWJJS4hJf+yqItA$SFlR~%d$V!nxjdN*Hg zbgLDeYAf@vc(vCLes@)u?a1d^HtxTmfJ;%xizkUL0A2`@wVg{!V-$?H#HwRV&?#q* zPkxC7eLQF6UZypKK!4|NR-(_v!KMvzQc@6V&s1P52`pWJtQ6}?vK=1+4gL<7P;yEq zclTR`;`r^Xk#FP8vQ1<&=aMywYhKKdqX5zXrJ{{SMw~QR2X$;^eB$c(MoQJpKI6A+ zK|GS)*Z~;eOvj*J(7V48w=3Q>aueSU#eJaJOtM-pGM+Gr z9o3_CXV*Wa^8e8 zjoC&q_r!^J?wcykwR3euio4e{olm0Xd1E_r_-M>n6qCc`;WpVIPoF(yJ1+GisQ;lT zu8MYci+eI}&UsHZKd5oGChNS*94v13=x>W;nB5c~DGu{Y77Ssb|sy$(6f zaE^`@eKM?(+rvHyC!VZ~xTGjMaKhE(JW!m$p@ir0vx`%j01$4+F{iD=`~1Vb+YPDt zMOBRal+wEh(VY`_)}nqH``j0+=Vs+(?=^9zJ+1%qPYQB*T<86bPr;SuJ3{eAZ_itC zf9kr1`^@{Sk|XD-BZZxtJ)9>!*=BPvd>4$bRNTnv*y-CaiHy!%XRvcPn3-+%?iBpg z2|lSbNgEV4g|OVz)j%mfk5}s1oBXSaU6O4GXcOPNO z82B*iU2VDl$D}^dAD+;khDXK2A%u>OrLM5cCNy8ART%<}Pl5oPMPyCe$$gRqL|FZU zOeI{?VoA>w z0RZ8DEiy>$JmDm++@ap(*LHpI$scJ%$<{UcL_|Gcb@df#d;jJ^lCz%UhNTG0Z9wu2 zgR+c`?fYEx!;N-kvh#IZ=RBLS89|CpQoaPkUjmMGpV^#EqHJFHrRuYjdFcrqqJOEj zm+$9sKL2DsMQKTWF=#tPqM~Enj&@m%4w^-nHvx82dXT56L*07mm(FOKk^2) z_a}viP3YZ#7;!PkS6@9R%WiOjg_~Y;c;2H~suD#pWm6LB1gu@g{V8<=qEvYJ_JvjI zP$zSVN~R|DyQEjGdlGWTwySte+|V)5 z;HzywaCe^cg~^aB#Iw3sSiJ>|CP;m2ZkRJ=2a|21iW2b1jCTxv^Mcg;_WYt6(QR^^ z;~YA&Fa02{LQ1$M_~`A^2pEBK*HcoL7eQuYuRW zRseeq#?$Dyv;fhO^RUgsV|yNMCb%xc)B~fbv%$moj>G1KkVaUvSb-2ZMMdxgaM6@( z0A>iLLCj93jMPw{eRFJBIV4`*;}^vIJAl>iYVjsZ{``OLSn&G!@Osn%Ws;Tq`TU9jAY0{Q z-gx?_;?JHk?@eVF@1Bqlc#5`6=07CLIAZ%GseGgJPN7_LO7dxpfWp2jks{+d{Jffx zri;4@h@Tj=jekEGf94zOU-q;Y_&ENcmyIoKn)m;()KCZ6TlsdP8*a*Ipq*7@DbXe4 zvB`kLZ5`U@S62gx+TgCuicVvdtfbqgXUSe)J%4ik%SrA&f=+tDYn=ZvwL(sSJ3nEl2L<*TOc+i}HljDVGjL^>G5=O+Z2Wj62 z-uI>bKJpMyetQx;)IG;XHwnGKXU}62Siyk>4SR~B@{9%CG{Y3G{@GW(Os#MG1b$$~ z(rH$0uB|*iOz#XJ;A3L1G`?Q71t+czdtWzuXA3(&005BfpnHI9DF+Gt2)+OSJ$>?{ zoc!e4$kP4&+wa+IyBU!(9pO94O5_l8;PE&sK$oTZGsVHD&xzvDa+2mD9v zTF8D4E?XU_K==ri{T*TLyS(7TKUmOjdG5aj>_Jgw`Wwm^jOFm3OLqH*{1zuXuSDXe z_PEwta5UzTY8j682R)YnxRUhe@=tM`#(R2r(FrZrfud>LUA)b4zGBG757tuYcK2=+ z&xiqx&ryJEtW_`keZdZpuj94v5vnYq3-BorlXuRDBBFEdMmXWYC7?KKkkL~x`MqmL zVap}ymJ~Qr;|h>J*&78k0Py&EeWkv|erL(8>OPc01p-{%vu%Zb?yNALR*D?pO?gr# zU-Ff&6R7GytphIVMM8j2?eK1}I={3!;E~X6DtUzbq()vuGnJV!IP|Xw`x9sAoKE&G zH-q2$slIJ<8L_~o6(P`>Bof~~#c4|jKb`C9sIQM~bNwVqLj+`>sj^XZe~gCt(5RO|;O zh)7ZzX8UM?3@J<(wSA0o*L23EUsYV~%Z2x4bxz4ZE#SYn4|S8nwsd1Tt%nV`$Saf7 zAXPRFAZ~)K{lUkg-R7Adk47IhCJlxy@IS%HNj-I2{5$0xcp%x7Q8X=Hy*bnyyvU;toEJ(Kv(u2s-3@ZmUb~HE8KWS2gv?3MIJs@r8-a~Xl zdO_#3R`-KTaAlRGjSUmC;wTA7mFV%y2vickGgw-jB`SVdpHpv$F!8EX7 zqNb2Tu&n@Gn!oQgf1U+@l`Qv!07$~R+j@q7km^M~@t@}@g9kB(`_n6v;;?}k5aE1T zUWj0GPh|%>pov5RBIidLk3WZXiU2}%QS&d&0>emY=FV?7M9kjRnxv1^GmMtQ6=0Fz z>W)t0^o4cy8`VKY|9fD33+F@7AkQ0V*duqXLE-^D7p@>JoGX769HVsJ`JI1CR)IVy z;PLYqkw!^fqEj|0(vSwA2+`|OrpYaU5xUgSaq(*H3Xo27^rvG3FPp*Z&etb z0+=H__QP%VhIL{k6et}rPFBM;fR~&YyMof(*;!zIZhonRLw>rHzE1SQnANryU_2dt zqk|Wg?&)Ru)-5T>&k{zwC?8>FuSIf~H(QLJ@?6OV%B}k72xq@IdD-tY*xs#G-mkM> z}FO5rkr8G->CGU5|0Bt|VyqE%{o@t-{a-n<QO-($cm6-WAQ9U))`Rkh^bTv^F8!(ZLan(8Yc$xJt1Cw z7_%IArK;~N-89KOx5vC$C~-GV-LFX@XN+~m>@XYt=DqZc9n5#r;4_kvSm+^SQlL|` zWch|2_l~;y!>NXos{66q??Ph%!cGWUe+V`)&<6Q0FbSl}157b4)P_#lm{V)2QwV5K z@q;40y=3!JBVfc{qu#|^WPPkFNRZbE;0!)tQdIK_U`>H&XD01T%nnT&p0}%hfQX(> zm5H#>-vLQjkpj~2n_N{L94Df(`!=I|U)6aVZC_otu;L4U`J&RvW3Tyud zs+?Y`bO&MvmfA+T)7*bX&Ch-?AM(T*vS!V$55Te*BZ=?Hj39OO0JH>9CRUUG*VtKo z2W6wd^qg^l5$Ku^UPj*TqVg^{>4TnEV;cLc#3-5M#Q-hfB61STmJO>;?VRUL1U4w% zF8Q^?I3J163cwTE$;g1Q-q28~vMV70Ai@^AmL?nr>1R9#1Rx1`I(lBc^368Hzqt!_ zLamVg*HSPM80>o0EdIS1H@F0RfkKUIv zL&2Ko)9mIVR~!DN?(~x704)Va&H-u&WIOlHDJz`1XBpgtuBBMkLoY+dm&co2t;i;a z;D3lQ)gY~tKB}CDL??Z#yULwlDFNBX(#Ta;^bax&CHjSYP6>}v zQE{KDsLQkA!kan?ULlAw$xeJ0>H3>b+UGzBYeX0(JE05kn)!I-Vm4`gfw#y|gCd4O z>D6l!!TJUX;UwCfy! z4Iz$)U8@M(NAt~~9e!hm$T0!MC|xZ(v*s)+i)S*NP^+rP2ui$MRG9uC_*WFG>GS!g zo9=#f{;sCK#DLieatH|B2_OlYdr9`ARmMM6gd|iJrtkQC zs%ENLnqs^3?*xG5^Kk`OkUO5#~ctaQZ7WsRH;W-#T^MaR69Ei5&b!KVh>31 zkDXej!@w8B%AOToew97)N~KJ9;Jmz*;-h}{qUs`urxue1JoYBFH~rx1otK|E+5Iu1 z?1Tq(gc17lTj+*nh|F?x0nj48q8DfcMBkgPJaas)6d1-A)sQ@@nSDg*%FNcOJ&rm97=n=!5?3`vAQ2oi~D&G)M|n zdT?Ihpj2EO?~<)WCBMYyGZoBCOI=`*{hxc2@&ZTuET{(>5|LNlj3nfavjN4Qc4u?_ zh^wD2`23NDd*N}~X7UC3Pyz2wyUQb+TQ%SOP!KYM8!V1Jdw2f#=cDlp;tRo`f{_-w ztG&IuCkj1Um(d&OD4ykbs*il}S^h#B+hN;(NLs|{i@7a02p3n${m zprhoyz*+;Ls-SMWK1TW`PfBn4#|8PYdf^0>p!y+(>s_O2P||q5;tPPIlk#XrZzNSh z|3#8pm1fMK#@M5V;97aR8)ctwa)wMlzIM7J@n8Vd*Iv<5f2#<3PwPOl-uxaA7!2-x z@Bt)JDAD71v5Y~ld)b24YNr3uZWy?78>nX9M)#B?7S$VN0Ns+BdO^CO zRDJo`q8HRp1t+~CS%;|61rm?C@76s7#{F8P_Ze^5f8y8LLvCFl#)7bb9d3Oa4iJ#PuNok7Q%2wJU^D$BgSmmRB; z6h2HB=C6$@{HPUtWwyZ^`odi}+pgmBmAura!@{qpZ<-4D?`n!^3eJ}YzD)OD9*DvQ z%AmGHQoKWku$U#Ic2sg8@OD?7&@IbP1N^`XYL|WGQUJ(*A$3{5w+8w7nQ{=&S+ts_ z`A!y%I2ai+NO;^|;8ain<2@yxD;Sv>njb;>p*lEkZpcWf8omkMB`i= z=H}$*<+-+UPJzyGcl`G!xJLV}+~6Nfd$s|w>b_({;pk+=qJnYkf=_r38Xvl|8D z-|!lz7~j%~#5CAdVA$h-Qar3pIjV!OCTuBkO}uDoCQAA&JL|X? z-Jflwx_Dw&lxH#Y(erz5s8SkGn?Ku#T^$fG92-BXQF&1SSmD4PpK!XEBy0Q-`_-r^ zL!;>)-CT|yPu>Jd>3^9NU%hZvV0uDW=h@9)M_lz97A*Yk+edZU#Ihb1)f}o+tkQFc zcqN|JK8_;fKOGOW40w!?T20nw@st-x&+mMTJ)(T$h4G+CpP2>f^2TS?Ti8Xe%o}dl zil`NDw)T5)`vE!87H$8FLd{zQB48jX*|HT`<{zVxKKWtq#_`37K0k-@6|bEp#;*Zb zJ@>B80UugBjG?jqk@sBDhIUvVc<K_duFYu&(+|FPiiJPCKO-uqIIFOXSC>2VTj6k`a8!0~ zmG4?a#s291oCE4q%gxX`niJ~0MrwgZde%mI7md{PjI`Lvx?6qfMp{~{$wi_Q>Wln( zdPbMAtI01^ON%tOc(dTI|69m zC)?;pU{_Q5*!P3EZ(>$yQJl=y*3G}mN95F1{>|YD>9}TH+qUFIVxjc2GP+7)<8{-L%fzW!$9j#S_Q*T&fhME`sS28k)ykhA8Fk9KEX`$0H4k;1J7jeNE+ZD5@^as}k=iSH^j zR8dejH~iCaJ5TlrIroli(|*#(9&XVXw6W*W#DQI-btFdPgzV4u@0NbD8Q}LA+>{-% zdRdu_h(8r;V2r-SomfkJ@lz;ucK}O@XS-w^=QngLfuy?vGA5}0bd(ZRLZJ#gv{Ogmm~sUL+iRezXQT1a00d!l_r zy=Vh~0?N_92;I(U^Nx#CRh_L0dfAc}?OJ^*Yn_-Qxhms#^FhAE-9- zSbh?eCe{j>Ktg%27)$pi1B0wyQ^~uEeUB{5J$ly0yZ3xiBRklz8H3wiO{fb0`~u*M z^$lr;u3@_6%n}-k<-hyNA7Ljf;pSFeg669bXqUeX!|*+D$Q;a3EHY;S;v8;hg$89= z+|;HUxf~U4Jy)7^gHP#Rvhm^Fxzx9tr9&Kfk6kg*l9Gu6LPQ)e9wxfZlhqb}V9}5XZN-QhpL|)fYatv`K$35U(>Bh+h zX1Um=yWWJzMlSegjn$AjIi$mEb3CyYvvI`9okh}>ieKGGTm$L0gA1dY4WpG5?A8oQ zdSitI$S5ST-wQr)?OEblxmTErupOV@-zL(^JwSVOZ+ju_V<7u)ALQxU1$mQT(JW`< zKneXbO^4TxCUAN|H9R=`x<#*)@d6QGPMG^wYrQ>Z} zpdL;TvQF!il|nnf)`7ZoI`HQ4^1RnR3a=B~hpY|-h6PJ59=>Q*cJudAqEmCpn&S&AubM>m$Z5Wt=ZSZk0!aF(R_a{^7Vdex-{Dy4acAB>CYRI7u;r zYov!k^_aw*loW1T5W6n#;44=>i)yuUi7he|6r``xXZK#t7H44Q^V8w0UXgvXX`<(u z0ZP8JJZwf0q8I#F^fFxSgs0dkU}#;gZqYI%}n^>AhV$vPZ4Y z6#hRAne&=Po9dt);#5cvuYTNKN&Y6=_*jbN8^q_+23`hDoG}(gR7kA~YcNbtPcg^Q zb~o6Cb1zm`(>7Ri8Mwo*i|r8}v;K3p3tmp7{!F?e$Nd@j=ZPZA1pY-Ccw<(&A|Ge-e+nL6ynsp02~Ud7)0YpPTzs6-GwESy?bnE^1<&4Ej_Wezdo%%Xwn zkZ1^aA2rDRR34^zQRm1Fij(*f>qbreUHG_cr0L5zgQ)ABO|q-Hu^QI=Q2!aeT0*TS)VZ)5dAHJ$7Gnlr}z)1Y7>a!}cCxIDvTwx)>lqZ1?E#y6?k7z#f@ zox26ED(@{vgv=^t<<)c#rfodcq-36^Oab4(;;$%f49d-}T&4K!IM)|C_jcSys>vVT zxTZJnW;38Ei)i%zP;Z`=3z3?MOOhARI2ooYgPb=E6xBkk8zc@TK{!uUOKD|<-No%v zvBa>qdnwz;aiH&5AUrc@2Z=Q%S7Z|q6dw&ikT5h=(F`a*?e3_HpnD*6G^OIN#8LPM zH*>FB`v{9->LeiqO+F+qkHc9_prClFd^V*&OyS4QUk!@?nw%e_ha^F`93+g_?CdU7 zQ0JUwb(o=#y<2e-(O(KR?aD4&fj~Y|`7{n~FpCqiFnO;=MmAJds@&ipFjUw(vP zXPT`KM?okPkaq($FMEU1S}N#p$;s{Ifknw zUyy!+RCEpmn*4_WKn5s6c^+1Wg-NBMW!%ufAOEeaFen&xg;jMK#8MG7QF(@d9SFmc%Fap2qV)-?|RU$(^qvua%k*bk*A85qpwvY)v8YX`e(Ud6{S2@5x0@ z00hR)SRo|J9->MRKTd%U{5WPQn2zf)L_iCV5~SEGr!r9qAUoK=(PT8D5J6s%+a7Rg zoajW}*D@jMg5nwH1$13j!4O-MkLJf5fKWI*WYB}sdb|(nd_G_>OT`x0D>nqa#6Ojm z$iC7#MS!>vmO+pL3R;zyPa`#Y@s&%MW;9eNmHhHC)JD5ePL2iiC_-JPAT>-NE~N%_0*51z>~}tms}%&fngMpUa-Y$ljMKL>cVt{L8*9CHdtB)A;@s$YqLk&h|1=XoW?iE zJEj-1u~xNujC1a)GF`+5IJ?8ZOkDF1PT$%rKF&rK*DO%WHzE%7%}as7pIoz z0Ob%UChvWwLbKTEbSfzztRq>3@BReXq(;bhkgR0hlLn)kNyY(zNOHrvL5ej+@dB9~ zFs)9?>M)7BiIR|zivGsW7Z(np%0Z=^bi)!>bjY*{kNRjrI}TwLmRONuZrGeukjUXZ z8L8D=*0m2i-AsZ?NMVXzR9N>bY=-8oIFO%ry%#S3wDMI6ofjrR@181~1hZo+B2|G! z=cXt=Vwy>I$F?Mr!E^CA^KTO~8(hs|ooN@tk`Yq5w>ltc!tN z0-)$ZWmiNJCVr_P`U4W0NF%qRMR%iYSSB*>K+IRiln|@=R#t-t`eN(moX%=4g?#NK zF8ym?Cr9+k_cv++3?v1_!1hewx<>#KZaI<(Suzj>c{$#QzBmrw#{ewr=C8p)Ro=^~ zvQ88XUss+H0y)%^!@MTqqbXRvTxrUI4U}1A;c!l3cj78M{7^%|mFzaTM>wE~H6oz$ zq?JQQMW8SyFI5-4b=5pCeflHL{}MzJfS?M`+Mt{j&O# zM?sesBqZlelM`%?S@FY=7Q_BH8k~gu0E*Ga70))A{gf+UT&)&|ELU`zDPqCZsJxaU z(qP9M{+>%9f|}q8JL9#Bi^nmKZgr^JXlw8i?Rq=c%{u zGWn|kOu|eLlE}mrO{-=Vo*d8su$xy?uJ`c30JXLPb~Ij;@4NSG3@hx$ zqJ(;N%yrhkcXAOj!r)dTiM9eU(=YmW-iWWhqQQTlp>O`(VaA4IqyY^d! z3?s6U;4pFg93Lq`1qpS&71`UH4s`FnRwnmLTwq~y2l-4`Ox~a&%#poP;v|W3EhYuqYhU)l_%!(ow7N;eCm88RG^aW$u)!blOaZS_ zCwhWv{kE&<{0~cq@tw?5pRgh8;yvbcoM`g@3I5? zl^_IDxfKGzh}y?_J6wMs5-s(U_YjFacx7~ee68%2oE={;`Bd1Z*%6A>;!_|buiQ{6 znlLFWXku!*w3uS03Yw}n-gUO>03vTsuo)2b!6{{YC)VvDfS%QV5x}Y>F8f zOo|zklRgG8?H)2mF!Yd&%W-9B1%EtG8ZN6WGFafRSMIq((zsi2ptLfE-|K2gf`!0) zx{X<}D=x+xm%%g0F5@wJpBsmJ{yeM9Av6nDf;TD0$=O-uv@y}=!8TK-aUZUGVp{Ex z7#ub+5sy3gn$h>;a+&Cifw-=N8JmydJqSdnKK6t4F?P)Pu*Hi!)CbTI^JD_p2Xq>A zD-3TsDI=1PK2&lDY{Luuz>f^v%Z`iaI#sr*EG$*|h$5UL#6DCZw;Bt>1jV29ufwTF z7sn^2jiWLW+mZznEGEZT$1DWI;il(@bOT z!`O^NFD8-C$3A`I^@n%4jb!1t8yLY2Exq-ZyT94JlSwk>FkhB-Zho0FPP4VLQETI# zv9$a%u#Y1B-2d0%7dlc|vh?qn4&&gDmjg!=MKG$Wi?c6wi}=`Ya&6i` zkkCrpO$mxETPN|Vy{42}PnWm%g|dd=pxH7nAFE^74gYsv)*A!FvEsiLgY^QiZiB09 zz4yY79T7qVR6lxom(T2Mm)WaZ>B(<~d&~z$T&&>VaFG&0Pq(7)=5B^8RX}mhRKeX;7dRHE@&Dyqip;ed@9DDF4^20 zRp^ZViCp(s4>4pr2agPF{5Fk%t&nCWq3x@z!HEeQyY02KpDV!wze0U3RQWx*_Tye4 z^(1Bc_t3B7noV|zNuA5b(WL!yFtnJxy+&I8KHR~oSr;m1A8Rxm$tYf*nAqg0#brT z3@3%W+c0W8cEqY~5sCbBr?^0gmk{@Q zV_Nz@>I&+5dA`l7()pr2r5w1BeuF)8SJ7tvtWGhTnVQ{%$ZZGj`B6HQ z)nhKsHIgz$ZU9DBTcTx7+6%(CZ7nT0oUcj)oCumEq`PJhOkDd!@P<-N{hEv zP3be`DL%s!caF;o3_1`F4JShI-Si@QG}B}_c>#D8U;t>8kWz&8ElxxfzW~I2h{z#e zpd%%CWm9HZcE=r|6dgvRY+@(*J$gM(*|gk>eo6D7@a^#xe{a}>8Dhq?(v#h=nz~5B zB5bddojP(@cQBFaNRhZGC#qGc1G2Z=Q_R<6mZz=N1r7HqK6(ea)E_kso^0bp(yn{J z!MD0t_uQ$grN4{=x{v`b#^R$!z1=bd&`;s;t!c(`!5iplbB13I%|ZKu_E_Z~2XZnn z{u+J|$YzEUV^6u+K{l87=q7R5k0H>;4Il@GYdc2W<3R8d$CK7jgUaJ5FswQ3X_^W9w zQ1Q=xLT|t0Y(E-RCagJdD9Pi%T!f`b=b6sNSPi0>eB40|6J;Nd`ke|Zavq}OZdX&| nu};4SE!tmmxH@B(OX;LH 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

Y|MR+7=J1d$n6da0N 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%0Ac23MujB{L`_KjL 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 UI697w|4+yN0`HKR*Z_D601&=XfdBvi diff --git a/oemaker.spec b/oemaker.spec index af2c9b5..7cf1ab5 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -15,7 +15,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 11 +Release: 12 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -31,6 +31,9 @@ Source9: rpmlist_loongarch64.xml Source10: desktop_normal_loongarch64.xml Source11: rpmlist_riscv64.xml Source12: normal_riscv64.xml +Source13: rpmlist_ppc64le.xml +Source14: normal_ppc64le.xml +Source15: edge_normal_ppc64le.xml Requires: createrepo dnf-plugins-core genisoimage isomd5sum grep bash libselinux-utils libxml2 anaconda libselinux-utils Requires: lorax >= 19.6.78-1 @@ -43,6 +46,12 @@ Patch0003: 0001-add-riscv64-support.patch %endif Patch0004: add-loongarch64-support-for-livecd.patch Patch0005: add-ls2k500sfb.ko-for-loongarch64.patch +%ifarch ppc64le +Patch0006: 0001-init-support-for-arch-ppc64le.patch +Patch0007: 0002-add-config-for-arch-ppc64le.patch +Patch0008: 0003-add-support-for-ppc64le-runtime-install.patch +%endif + %description a building tool for DVD ISO making and ISO cutting @@ -88,6 +97,14 @@ rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/x86_64/desktop_n cp %{SOURCE7} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/x86_64/desktop_normal.xml rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/loongarch64/desktop_normal.xml cp %{SOURCE10} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/loongarch64/desktop_normal.xml +%ifarch ppc64le +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml +cp %{SOURCE13} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/rpmlist.xml +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/ppc64le/normal.xml +cp %{SOURCE14} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/ppc64le/normal.xml +rm -rf %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/ppc64le/edge_normal.xml +cp %{SOURCE15} %{_builddir}/%{name}-%{version}/%{name}/isomaker/config/ppc64le/edge_normal.xml +%endif cd %{_builddir}/%{name}-%{version}/%{name} %autopatch -p1 @@ -147,6 +164,9 @@ install -m 400 %{name}/isomaker/config/common/livecd/root_pwd %{buildroot}/opt/o %ifarch riscv64 install -m 700 %{name}/isomaker/config/riscv64/livecd/live/riscv64.tmpl %{buildroot}/opt/oemaker/config/riscv64/livecd/live/riscv64.tmpl %endif +%ifarch ppc64le +install -m 700 %{name}/isomaker/config/ppc64le/livecd/live/ppc64le.tmpl %{buildroot}/opt/oemaker/config/ppc64le/livecd/live/ppc64le.tmpl +%endif install -m 700 %{name}/isomaker/docs/* %{buildroot}/opt/oemaker/docs/ cp -ar %{name}/isomaker/80-openeuler %{buildroot}/opt/oemaker/ @@ -214,6 +234,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Mon Jun 24 2024 jiahua yu - 3.1.0-12 +- ID:NA +- SUG:NA +- DESC: init support for arch ppc64le + * Wed May 29 2024 Wenlong Zhang - 3.1.0-11 - ID:NA - SUG:NA diff --git a/rpmlist_ppc64le.xml b/rpmlist_ppc64le.xml new file mode 100644 index 0000000..4723e1b --- /dev/null +++ b/rpmlist_ppc64le.xml @@ -0,0 +1,1405 @@ + + + + mariadb + mariadb-server + + + abrt-addon-ccpp + podman-help + libcmpiCppImpl0 + libev-libevent-devel + mariadb-devel + mariadb-test + podman-docker + python3-unversioned-command + python3-abrt-container-addon + + + texlive-collection-bibtexextra + texlive-collection-mathscience + texlive-collection-latexextra + texlive-collection-fontsextra + texlive-ctanupload + texlive-exceltex + texlive-latexindent + texlive-biblatex-apa + texlive-collection-binextra + texlive-collection-fontutils + texlive-includernw + texlive-oldstandard + texlive-scheme-full + texlive-scheme-gust + texlive-scheme-medium + texlive-scheme-tetex + totem + totem-debuginfo + totem-debugsource + totem-devel + totem-help + totem-nautilus + gimp + gimp-libs + gimp-devel + gimp-help + gimp-debuginfo + gimp-debugsource + python3-nni + ceph-mgr-rook + ceph-mgr-ssh + ceph-mgr-dashboard + ceph-mgr-k8sevents + + + totem + gimp + + + edk2-aarch64 + grub2-efi-aa64 + grub2-efi-aa64-modules + hisi_hpre + hisi_rde + hisi_sec2 + hisi_zip + libkae + libwd + shim-aa64 + uacce + + + grub2-efi-x64 + grub2-efi-x64-modules + shim + + + grub2-ppc64le + grub2-ppc64le-modules + + + abattis-cantarell-fonts + abattis-cantarell-fonts-help + accountsservice + accountsservice-help + accountsservice-libs + acl + acl-help + acpid + acpid-help + adcli + adcli-help + adobe-mappings-cmap + adobe-mappings-cmap-help + adobe-mappings-pdf + adobe-mappings-pdf-help + aide + aide-help + alsa-firmware + alsa-tools-firmware + apr + apr-help + arptables + arptables-help + arpwatch + arpwatch-help + asciidoc + asciidoc-help + at + at-help + attr + attr-help + audiofile + audit + audit-help + audit-libs + audit-libs-devel + authd + authd-help + authselect + authselect-compat + authselect-help + authselect-libs + avahi + avahi-autoipd + avahi-compat-howl + avahi-compat-libdns_sd + avahi-dnsconfd + avahi-gobject + avahi-libs + avahi-tools + basesystem + bash + bash-completion + bash-completion-help + bash-help + bc + bc-help + bind-chroot + bind-dyndb-ldap + bind-libs + bind-utils + binutils + binutils-devel + bison + bison-help + blas-devel + blktrace + blktrace-help + bluez + bluez-help + boost-atomic + boost-chrono + boost-context + boost-date-time + boost-devel + boost-filesystem + boost-graph + boost-help + boost-iostreams + boost-locale + boost-math + boost-program-options + boost-python3 + boost-random + boost-regex + boost-serialization + boost-system + boost-test + boost-thread + boost-timer + boost-wave + bridge-utils + brltty-docs + brotli + btrfs-progs + btrfs-progs-help + busybox + busybox-help + bzip2 + bzip2-help + ca-certificates + cachefilesd + cachefilesd-help + c-ares + c-ares-help + ccid + chkconfig + chkconfig-help + chrony + chrpath + chrpath-help + cifs-utils + cifs-utils-help + cjkuni-ukai-fonts + cjkuni-ukai-fonts-help + clibcni-devel + cloud-init + cloud-init-help + clutter + clutter-gst3 + clutter-gst3-help + clutter-gtk + clutter-gtk-help + clutter-help + cockpit + cockpit-help + cogl + cogl-help + containers-common + container-selinux + coreutils + coreutils-help + cpio + cpio-help + cracklib + cracklib-dicts + cracklib-help + crash + crash-help + createrepo_c + createrepo_c-help + cronie + cronie-help + crontabs + crontabs-help + crypto-policies + cryptsetup + cryptsetup-help + ctags + ctags-help + cups + cups-filters + cups-help + cups-libs + cups-pk-helper + curl + curl-help + cvs + cvs-help + cyrus-sasl + cyrus-sasl-gs2 + cyrus-sasl-help + cyrus-sasl-ldap + cyrus-sasl-lib + cyrus-sasl-md5 + cyrus-sasl-ntlm + cyrus-sasl-scram + dbus + dbus-glib + dbus-help + dbus-python-help + device-mapper + device-mapper-event + dhcp + dhcp-common + dhcp-libs + dhcp-server + dialog + dialog-help + diffstat + diffutils + diffutils-help + dmidecode + dmraid + dmraid-events + dnf + dnf-data + dnf-plugins-core + dnsmasq + dnsmasq-help + dnsmasq-utils + docbook-dtds + docbook-style-xsl + dos2unix + dosfstools + dosfstools-help + dracut + dracut-caps + dracut-config-generic + dracut-config-rescue + dracut-network + dracut-tools + dropwatch + drpm + drpm-devel + drpm-help + e2fsprogs + e2fsprogs-devel + e2fsprogs-help + ed + elfutils + elfutils-devel + ethtool + ethtool-help + exempi + exempi-help + expat + expat-devel + expat-help + expect + expect-help + file + file-help + file-libs + filesystem + findutils + findutils-help + fipscheck + fipscheck-help + firewalld + firewalld-doc + firewalld-filesystem + flex + freetype + freetype-help + ftp + ftp-help + fuse + fuse-help + fxload + fxload-help + gawk + gawk-help + gcc-gfortran + gcr + gdb + gdb-help + gdbm + gdbm-devel + gdbm-help + gdk-pixbuf2 + gdk-pixbuf2-help + genisoimage + geoclue2-libs + geocode-glib + geocode-glib-help + GeoIP + GeoIP-help + gettext + gettext-help + gettext-libs + git + git-help + gjs + glib2 + glib2-help + glibc + glibc-all-langpacks + glibc-common + glibc-devel + glibc-help + glibc-locale-source + gmp + gnupg2 + gnupg2-help + gnupg2-smime + gnutls + gnutls-c++ + gnutls-help + gobject-introspection + gobject-introspection-help + golang + golang-devel + golang-help + gperftools + gperftools-devel + gperftools-libs + gpgme + gpgme-help + grep + grilo + grilo-help + groff + groff-help + grpc + grpc-devel + grpc-plugins + grub2-common + grub2-help + grub2-tools + grubby + grubby-help + gssproxy + gssproxy-help + gzip + gzip-help + haveged + haveged-help + hdf5 + hdf5-devel + hdparm + hdparm-help + hostname + httpd + httpd-help + httpd-tools + http-parser + http-parser-devel + http-parser-help + hunspell + hunspell-en-help + hunspell-help + hwdata + hwinfo + hwinfo-help + hwloc-gui + i2c-tools-eepromer + i2c-tools-help + ima-evm-utils + ima-evm-utils-help + info + initscripts + iotop + iotop-help + ipcalc + ipcalc-help + ipmitool + ipmitool-help + iproute + iproute-help + iprutils + iprutils-help + ipset + ipset-help + ipset-libs + iptables + iptraf-ng + iptraf-ng-help + iptstate + iptstate-help + iputils + iputils-help + ipvsadm + ipvsadm-help + irqbalance + irqbalance-help + ivtv-firmware + iw + iw-help + jansson + jansson-help + java-1.8.0-openjdk + java-1.8.0-openjdk-devel + java-1.8.0-openjdk-headless + json-c + json-c-help + json-glib + json-glib-help + kbd + kbd-help + kbd-legacy + kbd-misc + keepalived + kernel + kernel-devel + kernel-source + kernel-tools + kernel-tools-libs + kernel-tools-libs-devel + kexec-tools + kexec-tools-help + keyutils + keyutils-help + keyutils-libs-devel + kiwi-help + kiwi-tools + kmod + kmod-help + kpartx + kpatch + kpatch-help + kpatch-runtime + krb5 + krb5-client + krb5-devel + krb5-help + krb5-server + lapack + lapack-devel + lcr + ldns + ldns-help + less + less-help + lftp + lftp-help + libacl + libaio + libarchive + libarchive-help + libassuan + libassuan-help + libbasicobjects + libblkid + libbonobo + libbonobo-help + libcanberra-gtk2 + libcanberra-help + libcap + libcap-help + libcap-ng + libcap-ng-help + libcap-ng-python3 + libcgroup + libcgroup-devel + libcgroup-help + libcollection + libcomps + libcomps-help + libconfig + libcurl + libdaemon + libdaemon-help + libdb + libdb-cxx + libdb-devel + libdbi + libdbi-help + libdb-sql + libdb-tcl + libdb-utils + libdhash + libdmx + libdmx-help + libdnet-devel + libdnet-help + libdnet-progs + libdnf + libecap + libecap-help + libedit + libedit-help + liberation-fonts + libesmtp + libesmtp-help + libestr + libevdev + libevdev-help + libevent + libevent-devel + libevhtp-devel + libexif + libexif-help + libfastjson + libfdisk + libffi + libffi-help + libgcc + libgcrypt + libgcrypt-help + libgee + libgee-help + libgnomekbd + libgomp + libgpg-error + libgsf + libgsf-help + libgtop2 + libgtop2-help + libgweather + libgweather-help + libgxps + libgxps-help + libhugetlbfs + libhugetlbfs-help + libhugetlbfs-utils + libical + libicu-devel + libidn + libidn2 + libidn2-help + libimobiledevice + libimobiledevice-help + libini_config + libiptcdata + libiscsi + libiscsi-help + libkadm5 + libkcapi + libkcapi-help + libkcapi-hmaccalc + libksba + libksba-help + libldb + libldb-help + libmaxminddb + libmaxminddb-help + libmediaart + libmediaart-help + libmetalink + libmetalink-help + libmng + libmng-help + libmnl + libmnl-static + libmodulemd + libmount + libmspack + libmspack-help + libndp + libndp-help + libnetfilter_conntrack + libnetfilter_queue + libnfnetlink + libnfnetlink-help + libnftnl + libnghttp2 + libnl3 + libnl3-cli + libnl3-devel + libnl3-help + libnma + libnsl2 + liboauth + liboauth-help + libogg + libogg-help + libosinfo + libosinfo-help + libpath_utils + libpcap + libpcap-devel + libpcap-help + libpciaccess + libpipeline + libpipeline-help + libpkgconf + libplist + libpng + libpng-help + libpsl + libpsl-help + libpwquality + libpwquality-help + librados2 + libref_array + librepo + libreport-filesystem + libreport-help + libsamplerate + libseccomp + libseccomp-help + libsecret + libsecret-help + libselinux + libselinux-devel + libselinux-help + libselinux-utils + libsemanage + libsemanage-help + libsepol + libsepol-help + libsexy + libsexy-help + libsigsegv + libsmartcols + libsolv + libsolv-help + libssh + libssh2 + libssh2-help + libssh-help + libsss_autofs + libsss_certmap + libsss_idmap + libsss_nss_idmap + libsss_sudo + libstdc++ + libtalloc + libtalloc-help + libtasn1 + libtasn1-help + libtdb + libtdb-help + libteam + libteam-help + libtevent + libtevent-help + libthai + libthai-static + libtirpc + libtirpc-help + libtool-ltdl + libtool-help + libunistring + libunistring-help + libunwind + libunwind-help + libusal + libusb + libusbmuxd + libusbx + libuser + libuser-help + libuser-python3 + libutempter + libutempter-help + libuuid + libverto + libverto-devel + libverto-glib + libverto-libevent + libvirt + libvirt-admin + libvirt-client + libvirt-daemon + libvirt-daemon-config-network + libvirt-daemon-config-nwfilter + libvirt-daemon-driver-interface + libvirt-daemon-driver-network + libvirt-daemon-driver-nodedev + libvirt-daemon-driver-nwfilter + libvirt-daemon-driver-qemu + libvirt-daemon-driver-secret + libvirt-daemon-driver-storage + libvirt-daemon-driver-storage-core + libvirt-daemon-driver-storage-disk + libvirt-daemon-driver-storage-gluster + libvirt-daemon-driver-storage-iscsi + libvirt-daemon-driver-storage-iscsi-direct + libvirt-daemon-driver-storage-logical + libvirt-daemon-driver-storage-mpath + libvirt-daemon-driver-storage-rbd + libvirt-daemon-driver-storage-scsi + libvirt-daemon-kvm + libvirt-daemon-qemu + libvirt-devel + libvirt-docs + libvirt-libs + libvirt-nss + libwacom + libwacom-data + libwebsockets + libwebsockets-devel + libwebsockets-help + libwnck3 + libwnck3-help + libX11 + libX11-help + libx86emu + libxcrypt + libxcrypt-help + libXdmcp + libXdmcp-help + libXfont2 + libXfont2-help + libxkbcommon + libxkbcommon-x11 + libxkbfile + libxklavier + libxklavier-help + libxml2 + libxml2-help + libxslt + libxslt-help + libXvMC + libXvMC-help + libXxf86dga + libXxf86dga-help + libyaml + libyaml-help + linux-firmware + lm_sensors + lm_sensors-devel + lm_sensors-help + lm_sensors-sensord + lockdev + lockdev-help + logrotate + logrotate-help + lshw + lshw-help + lsof + lsof-help + lsscsi + lsscsi-help + lua + lua-expat + lua-expat-help + lua-help + lua-socket + lua-socket-help + lvm2 + lvm2-help + lxc + lxc-devel + lxcfs + lxcfs-tools + lxc-help + lz4 + lz4-help + lz4-libs + lzo + lzo-help + lzo-minilzo + lzop + lzop-help + m4 + m4-help + mailcap + mailcap-help + mailx + mailx-help + make + make-help + man-db + man-pages + mcstrans + mcstrans-help + mdadm + mdadm-help + mesa-filesystem + mesa-libGLES + metacity + metacity-help + mlocate + mlocate-help + mobile-broadband-provider-info + mobile-broadband-provider-info-help + mod_ldap + mod_md + mod_proxy_html + mod_session + mod_ssl + mozilla-filesystem + mpfr + mtdev + mtools + mtools-help + mtr + mtr-help + multipath-tools + multipath-tools-help + ncompress + ncompress-help + ncurses + ncurses-devel + ncurses-help + ndisc6 + netcf + netcf-help + netconsole-service + net-snmp + net-snmp-devel + net-snmp-help + nettle + nettle-help + net-tools + net-tools-help + NetworkManager + NetworkManager-help + NetworkManager-libnm + network-scripts + newt + newt-devel + newt-help + nfs4-acl-tools + nfs4-acl-tools-help + nfs-utils + nfs-utils-help + nftables + nftables-help + nmap + nmap-help + nm-connection-editor + notification-daemon + notification-daemon-help + npth + nscd + nss + nss-help + nss-mdns + nss-mdns-help + nss-pam-ldapd + nss-pam-ldapd-help + nss-pem + nss-softokn + ntp + ntp-help + numactl + numactl-devel + numactl-libs + numad + numad-help + oddjob + oddjob-help + openblas-serial + openblas-threads + openEuler-indexhtml + openEuler-logos + openEuler-release + OpenIPMI + OpenIPMI-devel + OpenIPMI-perl + open-iscsi + open-iscsi-help + open-isns-help + openldap + openldap-clients + openldap-help + openldap-servers + opensc + opensc-help + openslp + openslp-help + openssh + openssh-askpass + openssh-clients + openssh-help + openssh-keycat + openssh-server + openssl + openssl-devel + openssl-help + openssl-pkcs11 + openvpn + openvpn-devel + openvpn-help + openvswitch + openvswitch-devel + opus + opus-help + ORBit2 + orc + orc-help + osinfo-db + osinfo-db-tools + osinfo-db-tools-help + os-prober + p11-kit + p11-kit-help + p11-kit-trust + pam + pam_cifscreds + pam_ssh_agent_auth + pam-help + parted + passwd + passwd-help + patch + patch-help + pciutils + pciutils-devel + pciutils-help + pcre + pcre2 + pcre2-help + pcre-devel + pcre-help + pcre-tools + pcsc-lite + pcsc-lite-help + perf + perl + perl-Compress-Raw-Bzip2 + perl-Compress-Raw-Bzip2-help + perl-Compress-Raw-Zlib + perl-Compress-Raw-Zlib-help + perl-DBD-MySQL + perl-DBD-MySQL-help + perl-DBD-SQLite + perl-DBD-SQLite-help + perl-devel + perl-Devel-PPPort + perl-Devel-PPPort-help + perl-ExtUtils-Install + perl-ExtUtils-Install-help + perl-ExtUtils-MakeMaker + perl-ExtUtils-MakeMaker-help + perl-ExtUtils-Manifest + perl-ExtUtils-Manifest-help + perl-ExtUtils-ParseXS + perl-ExtUtils-ParseXS-help + perl-Filter + perl-Filter-help + perl-Filter-Simple-help + perl-help + perl-IO-Compress + perl-IO-Compress-help + perl-List-MoreUtils + perl-List-MoreUtils-help + perl-List-MoreUtils-XS-help + perl-Net-Daemon + perl-Net-Daemon-help + perl-Test-Harness + perl-Test-Harness-help + perl-Thread-Queue + perl-Thread-Queue-help + perl-Time-HiRes + perl-Time-HiRes-help + perl-XML-Parser + perl-XML-Parser-help + perl-XML-Writer + perl-XML-Writer-help + pigz + pigz-help + pinentry + pinentry-help + pkcs11-helper + pkcs11-helper-devel + pkcs11-helper-help + pkgconf + pkgconf-help + plymouth + plymouth-help + policycoreutils + policycoreutils-help + polkit + polkit-help + polkit-libs + polkit-pkla-compat + polkit-pkla-compat-help + poppler-cpp + poppler-data + poppler-glib + poppler-help + popt + popt-devel + popt-help + postfix + postfix-help + ppp + ppp-help + pprof + procmail + procmail-help + procps-ng + procps-ng-devel + procps-ng-i18n + protobuf + protobuf-devel + protobuf-lite + protobuf-lite-devel + psmisc + publicsuffix-list + pulseaudio + pulseaudio-help + python3 + python3-aniso8601 + python3-click + python3-configobj + python3-dateutil + python3-dbus + python3-decorator + python3-devel + python3-dict2xml + python3-dmidecode + python3-dnf + python3-dnf-plugins-core + python3-ethtool + python3-firewall + python3-flask + python3-flask-restful + python3-gobject-base + python3-gpg + python3-hawkey + python3-i2c-tools + python3-iniparse + python3-inotify + python3-itsdangerous + python3-jinja2 + python3-joblib + python3-jsonpatch + python3-jsonpointer + python3-libcomps + python3-libdnf + python3-librepo + python3-libs + python3-libselinux + python3-libvirt + python3-libxml2 + python3-linux-procfs + python3-net-snmp + python3-newt + python3-numpy + python3-openipmi + python3-pandas + python3-perf + python3-pip + python3-pyatspi + python3-pycurl + python3-pyOpenSSL + python3-pyparsing + python3-pyudev + python3-pyxattr + python3-rpm + python3-rtslib + python3-schedutils + python3-scikit-learn + python3-scikit-optimize + python3-scipy + python3-setuptools + python3-six + python3-slip + python3-sssdconfig + python3-talloc + python3-unbound + python3-urlgrabber + python3-werkzeug + python3-xgboost + qemu + qemu-guest-agent + qemu-help + qemu-img + qpdf + qrencode + qrencode-help + quota + quota-help + rarian + rarian-help + rasdaemon + rdate + rdate-help + readline + readline-help + readonly-root + realmd + realmd-help + recode + recode-help + rootfiles + rpcbind + rpcbind-help + rpm + rpm-build-libs + rpm-cron + rpm-devel + rpmdevtools + rpmdevtools-help + rpm-help + rpm-libs + rpm-plugin-selinux + rpm-plugin-systemd-inhibit + rpmrebuild + rpmrebuild-help + rsync + rsync-help + rsyslog + rsyslog-crypto + rsyslog-elasticsearch + rsyslog-gnutls + rsyslog-help + rsyslog-mmaudit + rsyslog-mmjsonparse + rsyslog-mmsnmptrapd + rsyslog-mysql + rsyslog-snmp + rtkit + rtkit-help + samba-common-tools + samba-help + sbc + sbc-help + screen + screen-help + sdparm + sdparm-help + sed + sed-help + selinux-policy + selinux-policy-minimum + selinux-policy-sandbox + selinux-policy-targeted + sendmail + sendmail-help + setools-console + setools-help + setserial + setserial-help + setup + sg3_utils + sg3_utils-help + sgml-common + sgml-common-help + shadow-help + shadow + shared-mime-info + shared-mime-info-help + sharutils + sharutils-help + slang + slang-devel + slang-help + smartmontools + smartmontools-help + smp_utils + smp_utils-help + snappy + snappy-help + source-highlight + source-highlight-help + speex + speex-help + sqlite + sqlite-help + squashfs-tools + squid + sssd + sssd-client + sssd-help + sssd-nfs-idmap + strace + strongswan + sudo + sudo-help + symlinks + sysfsutils + sysfsutils-help + sysstat + systemd + systemd-devel + systemd-help + systemd-libs + systemd-pam + systemd-udev + systemtap-help + systemtap-sdt-devel + taglib + taglib-help + tar + tar-help + tcl + tcl-help + tcpdump + tcpdump-help + tcp_wrappers + tcp_wrappers-help + tcp_wrappers-libs + tcpdump + tcpdump-help + tcsh + tcsh-help + telepathy-filesystem + telepathy-glib + telepathy-logger + telepathy-logger-help + telnet + telnet-help + tftp + tftp-help + tftp-server + thin-provisioning-tools + thin-provisioning-tools-help + tigervnc + tigervnc-server-minimal + time + timedatex + timedatex-help + time-help + tipcutils + tipcutils-help + tk + tk-help + tmux + tmux-help + totem-pl-parser + totem-pl-parser-help + tpm2-abrmd + tpm2-abrmd-help + tpm2-tools + tpm2-tools-help + tpm2-tss + tpm2-tss-help + traceroute + traceroute-help + tree + tree-help + trousers + trousers-help + trousers-lib + tuned + tuned-help + tzdata + unbound-libs + unzip + unzip-help + upower + usbredir + usbredir-help + usbutils + usbutils-help + usermode + usermode-help + userspace-rcu + ustr + ustr-help + util-linux + vim-enhanced + vim-minimal + vino + vino-help + virt-what + virt-what-help + vsftpd + vsftpd-help + wget + wget-help + which + which-help + wpa_supplicant + wpa_supplicant-help + wqy-microhei-fonts + wqy-microhei-fonts-help + wqy-zenhei-fonts + xfsprogs + xfsprogs-help + xinetd + xinetd-help + xkeyboard-config + xkeyboard-config-help + xmlsec1-help + xmlsec1-openssl + xmlto + xmlto-help + xterm + xterm-help + xvattr + xvattr-help + xz + xz-devel + xz-help + xz-libs + xz-lzma-compat + ypbind + ypbind-help + ypserv + ypserv-help + yp-tools + yp-tools-help + yum + zip + zip-help + zlib + zlib-devel + zlib-help + zsh + zstd-help + zziplib-help + zziplib-utils + + + grub2-efi-aa64 + grub2-efi-aa64-cdboot + grub2-efi-aa64-modules + + + grub2-pc + grub2-pc-modules + grub2-efi-x64 + grub2-efi-x64-modules + + + kubeedge-cloudcore + kubeedge-edgecore + kubeedge-edgesite + kubeedge-keadm + grub2-common + grub2-tools-minimal + grub2-tools-extra + grub2-tools + grub2-help + lvm2-help + lvm2 + mdadm + mdadm-help + dosfstools-help + dosfstools + rpm-build + net-tools + sysstat + at + tpm-tools + expect + xinetd + httpd + vsftpd + acpid + aide + audit-devel + bridge-utils + cifs-utils + ftp + xinetd + tftp + tftp-server + mod_ssl + traceroute + mtr + libcgroup + lldpad + iotop + tcpdump + setools-console + strace + time + cockpit + openvswitch + docker + numactl + nfs4-acl-tools + perl + perf + rpmrebuild + + -- Gitee From e88e42002c48e211db51cd845b292727ce2d271d Mon Sep 17 00:00:00 2001 From: wangchong1995924 <15229716099@163.com> Date: Wed, 10 Jul 2024 16:21:28 +0800 Subject: [PATCH 09/10] fix bug IABY7K --- 0004-bugfix-IABY7K.patch | 31 +++++++++++++++++++++++++++++++ oemaker.spec | 8 +++++++- 2 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 0004-bugfix-IABY7K.patch diff --git a/0004-bugfix-IABY7K.patch b/0004-bugfix-IABY7K.patch new file mode 100644 index 0000000..e559a9d --- /dev/null +++ b/0004-bugfix-IABY7K.patch @@ -0,0 +1,31 @@ +From 52f60354b4d48a0b3c2a25ddabb10a47073bfb0c Mon Sep 17 00:00:00 2001 +From: wangchong1995924 <15229716099@163.com> +Date: Wed, 10 Jul 2024 15:28:00 +0800 +Subject: [PATCH] fix issue IABY7K + + +diff --git a/isomaker/rpm.sh b/isomaker/rpm.sh +index a9efe4b..b2ba4de 100644 +--- a/isomaker/rpm.sh ++++ b/isomaker/rpm.sh +@@ -185,7 +185,7 @@ function get_desktop_rpms() + + function get_everything_rpms() + { +- yum list --installroot="${BUILD}"/tmp --available | awk '{print $1}' | grep -E "\.noarch|\.${ARCH}" | grep -v "debuginfo" | grep -v "debugsource" > ava_every_lst ++ yum list --installroot="${BUILD}"/tmp --available | awk '{print $1}' | grep -E "\.noarch|\.${ARCH}" | grep -v "debuginfo\." | grep -v "debugsource\." > ava_every_lst + parse_rpmlist_xml "exclude" + cat parsed_rpmlist_exclude + if [ -s parsed_rpmlist_exclude ];then +@@ -259,7 +259,7 @@ function everything_source_rpms_download() + function everything_debug_rpms_download() + { + mkdir ${EVERY_DEBUG_DIR} +- yum list --installroot="${BUILD}"/tmp --available | awk '{print $1}' | grep -E "debuginfo|debugsource" > ava_debug_lst ++ yum list --installroot="${BUILD}"/tmp --available | awk '{print $1}' | grep -E "debuginfo\.|debugsource\." > ava_debug_lst + parse_rpmlist_xml "everything_debug_exclude" + cat parsed_rpmlist_everything_debug_exclude + if [ -s parsed_rpmlist_everything_debug_exclude ];then +-- +2.27.0 + diff --git a/oemaker.spec b/oemaker.spec index 7cf1ab5..8bb5a96 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -15,7 +15,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 12 +Release: 13 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -51,6 +51,7 @@ Patch0006: 0001-init-support-for-arch-ppc64le.patch Patch0007: 0002-add-config-for-arch-ppc64le.patch Patch0008: 0003-add-support-for-ppc64le-runtime-install.patch %endif +Patch0009: 0004-bugfix-IABY7K.patch %description @@ -234,6 +235,11 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Wed Jul 10 2024 wangchong - 3.1.0-13 +- ID:NA +- SUG:NA +- DESC: fix issue IABY7K + * Mon Jun 24 2024 jiahua yu - 3.1.0-12 - ID:NA - SUG:NA -- Gitee From 3d1f95fde5c84febc502f1e523c9cf2e7c1b8693 Mon Sep 17 00:00:00 2001 From: ouuleilei Date: Tue, 16 Jul 2024 11:15:20 +0800 Subject: [PATCH 10/10] fix riscv64 support patch conflict problem and riscv64 package xml adjustment --- 0001-add-riscv64-support.patch | 172 +++++++++++++++++---------------- normal_riscv64.xml | 23 ----- oemaker.spec | 10 +- rpmlist_riscv64.xml | 8 ++ 4 files changed, 101 insertions(+), 112 deletions(-) diff --git a/0001-add-riscv64-support.patch b/0001-add-riscv64-support.patch index 2abb994..1e539b8 100644 --- a/0001-add-riscv64-support.patch +++ b/0001-add-riscv64-support.patch @@ -1,24 +1,24 @@ -From abe27c45365f98a01f3bef968f5e027e6da3b07c Mon Sep 17 00:00:00 2001 +From 924f6801cb6af7d897c4de5b9ae7965426a98335 Mon Sep 17 00:00:00 2001 From: ouuleilei -Date: Tue, 28 May 2024 10:35:17 +0800 +Date: Thu, 13 Jun 2024 13:11:27 +0800 Subject: [PATCH] add riscv64 support --- - envmaker/config/compile_env_rpmlist.xml | 6 +- + envmaker/config/compile_env_rpmlist.xml | 4 + envmaker/config/riscv64/openEuler_repo.conf | 17 + isocut/config/riscv64/anaconda-ks.cfg | 371 ++++ isocut/config/riscv64/rpmlist | 1 + isocut/isocut.py | 7 + .../config_files/riscv64/boot.msg | 5 + .../config_files/riscv64/grub.conf | 13 + - .../config_files/riscv64/grub2-efi.cfg | 47 + + .../config_files/riscv64/grub2-efi.cfg | 46 + isomaker/80-openeuler/efi.tmpl | 14 +- - isomaker/80-openeuler/live/efi.tmpl | 4 + - isomaker/80-openeuler/live/riscv64.tmpl | 83 + - isomaker/80-openeuler/riscv64.tmpl | 76 + + isomaker/80-openeuler/live/efi.tmpl | 5 + + isomaker/80-openeuler/live/riscv64.tmpl | 82 + + isomaker/80-openeuler/riscv64.tmpl | 75 + isomaker/80-openeuler/runtime-cleanup.tmpl | 2 + isomaker/80-openeuler/runtime-install.tmpl | 7 +- - isomaker/config/common/livecd/live/efi.tmpl | 5 + + isomaker/config/common/livecd/live/efi.tmpl | 3 + isomaker/config/riscv64/desktop_normal.xml | 0 isomaker/config/riscv64/edge_normal.xml | 0 .../livecd/live/config_files/riscv64/boot.msg | 5 + @@ -26,12 +26,12 @@ Subject: [PATCH] add riscv64 support .../live/config_files/riscv64/grub2-efi.cfg | 38 + .../config/riscv64/livecd/live/riscv64.tmpl | 75 + .../config/riscv64/livecd/livecd_riscv64.ks | 70 + - isomaker/config/riscv64/livecd/rpmlist | 112 ++ + isomaker/config/riscv64/livecd/rpmlist | 111 ++ isomaker/config/riscv64/normal.xml | 1569 +++++++++++++++++ isomaker/config/riscv64/standard.conf | 6 + isomaker/init.sh | 2 +- isomaker/iso.sh | 18 +- - 27 files changed, 2544 insertions(+), 18 deletions(-) + 27 files changed, 2538 insertions(+), 17 deletions(-) create mode 100644 envmaker/config/riscv64/openEuler_repo.conf create mode 100644 isocut/config/riscv64/anaconda-ks.cfg create mode 100644 isocut/config/riscv64/rpmlist @@ -52,7 +52,7 @@ Subject: [PATCH] add riscv64 support create mode 100644 isomaker/config/riscv64/standard.conf diff --git a/envmaker/config/compile_env_rpmlist.xml b/envmaker/config/compile_env_rpmlist.xml -index d2461ea..eec1480 100644 +index d2461ea..b7b99ce 100644 --- a/envmaker/config/compile_env_rpmlist.xml +++ b/envmaker/config/compile_env_rpmlist.xml @@ -17,6 +17,10 @@ @@ -66,16 +66,9 @@ index d2461ea..eec1480 100644 acl acpica-tools -@@ -463,4 +467,4 @@ - clang - imageTailor - -- -\ No newline at end of file -+ diff --git a/envmaker/config/riscv64/openEuler_repo.conf b/envmaker/config/riscv64/openEuler_repo.conf new file mode 100644 -index 0000000..4bff406 +index 0000000..d2a677c --- /dev/null +++ b/envmaker/config/riscv64/openEuler_repo.conf @@ -0,0 +1,17 @@ @@ -96,9 +89,10 @@ index 0000000..4bff406 +baseurl=https://repo.openeuler.org/openEuler-23.09/OS/riscv64/ +enabled=1 +gpgcheck=0 +\ No newline at end of file diff --git a/isocut/config/riscv64/anaconda-ks.cfg b/isocut/config/riscv64/anaconda-ks.cfg new file mode 100644 -index 0000000..adcb6fe +index 0000000..f586d14 --- /dev/null +++ b/isocut/config/riscv64/anaconda-ks.cfg @@ -0,0 +1,371 @@ @@ -473,13 +467,15 @@ index 0000000..adcb6fe +NetworkManager.riscv64 + +%end +\ No newline at end of file diff --git a/isocut/config/riscv64/rpmlist b/isocut/config/riscv64/rpmlist new file mode 100644 -index 0000000..b134835 +index 0000000..78c2220 --- /dev/null +++ b/isocut/config/riscv64/rpmlist @@ -0,0 +1 @@ -+kernel.riscv64 ++kernel.riscv64 +\ No newline at end of file diff --git a/isocut/isocut.py b/isocut/isocut.py index 8578f83..be836ff 100755 --- a/isocut/isocut.py @@ -518,7 +514,7 @@ index 0000000..ff54899 + diff --git a/isomaker/80-openeuler/config_files/riscv64/grub.conf b/isomaker/80-openeuler/config_files/riscv64/grub.conf new file mode 100644 -index 0000000..49fa32b +index 0000000..a36d183 --- /dev/null +++ b/isomaker/80-openeuler/config_files/riscv64/grub.conf @@ -0,0 +1,13 @@ @@ -528,19 +524,20 @@ index 0000000..49fa32b +timeout 5 +hiddenmenu +title Install @PRODUCT@ @VERSION@ -+ findiso -+ kernel @KERNELPATH@ @ROOT@ quiet -+ initrd @INITRDPATH@ ++ findiso ++ kernel @KERNELPATH@ @ROOT@ quiet ++ initrd @INITRDPATH@ +title Test this media & install @PRODUCT@ @VERSION@ -+ findiso -+ kernel @KERNELPATH@ @ROOT@ rd.live.check quiet -+ initrd @INITRDPATH@ ++ findiso ++ kernel @KERNELPATH@ @ROOT@ rd.live.check quiet ++ initrd @INITRDPATH@ +\ No newline at end of file diff --git a/isomaker/80-openeuler/config_files/riscv64/grub2-efi.cfg b/isomaker/80-openeuler/config_files/riscv64/grub2-efi.cfg new file mode 100644 -index 0000000..918b7d3 +index 0000000..b19ceb2 --- /dev/null +++ b/isomaker/80-openeuler/config_files/riscv64/grub2-efi.cfg -@@ -0,0 +1,47 @@ +@@ -0,0 +1,46 @@ +set default="1" + +function load_video { @@ -564,30 +561,30 @@ index 0000000..918b7d3 +insmod ext2 + +set timeout=60 -+set debug="linux,loader,mm" +### END /etc/grub.d/00_header ### + +search --no-floppy --set=root -l '@ISOLABEL@' + +### BEGIN /etc/grub.d/10_linux ### +menuentry 'Install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os { -+ linux @KERNELPATH@ @ROOT@ ro inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl -+ initrd @INITRDPATH@ ++ linux @KERNELPATH@ @ROOT@ ro inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ +} +menuentry 'Test this media & install @PRODUCT@ @VERSION@' --class red --class gnu-linux --class gnu --class os { -+ linux @KERNELPATH@ @ROOT@ rd.live.check inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl -+ initrd @INITRDPATH@ ++ linux @KERNELPATH@ @ROOT@ rd.live.check inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ +} +submenu 'Troubleshooting -->' { -+ menuentry 'Install @PRODUCT@ @VERSION@ in basic graphics mode' --class red --class gnu-linux --class gnu --class os { -+ linux @KERNELPATH@ @ROOT@ nomodeset inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl -+ initrd @INITRDPATH@ -+ } -+ menuentry 'Rescue the @PRODUCT@ system' --class red --class gnu-linux --class gnu --class os { -+ linux @KERNELPATH@ @ROOT@ rescue systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl -+ initrd @INITRDPATH@ -+ } ++ menuentry 'Install @PRODUCT@ @VERSION@ in basic graphics mode' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ nomodeset inst.geoloc=0 systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ ++ } ++ menuentry 'Rescue the @PRODUCT@ system' --class red --class gnu-linux --class gnu --class os { ++ linux @KERNELPATH@ @ROOT@ rescue systemd.default_timeout_start_sec=600 selinux=0 highres=off earlycon no4lvl ++ initrd @INITRDPATH@ ++ } +} +\ No newline at end of file diff --git a/isomaker/80-openeuler/efi.tmpl b/isomaker/80-openeuler/efi.tmpl index 0b5e770..29a61d4 100644 --- a/isomaker/80-openeuler/efi.tmpl @@ -621,10 +618,10 @@ index 0b5e770..29a61d4 100644 ## actually make the EFI images diff --git a/isomaker/80-openeuler/live/efi.tmpl b/isomaker/80-openeuler/live/efi.tmpl -index 79f6444..1fa7bf6 100644 +index 79f6444..25e07f3 100644 --- a/isomaker/80-openeuler/live/efi.tmpl +++ b/isomaker/80-openeuler/live/efi.tmpl -@@ -6,6 +6,10 @@ EFIBOOTDIR="EFI/BOOT" +@@ -6,10 +6,15 @@ EFIBOOTDIR="EFI/BOOT" mkdir ${EFIBOOTDIR} mkdir ${EFIBOOTDIR}/fonts/ %if efiarch64: @@ -635,12 +632,17 @@ index 79f6444..1fa7bf6 100644 install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi + %endif ++%endif + %if efiarch32: + install boot/efi/EFI/*/shim${efiarch32|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch32}.EFI + install boot/efi/EFI/*/mm${efiarch32|lower}.efi ${EFIBOOTDIR}/ diff --git a/isomaker/80-openeuler/live/riscv64.tmpl b/isomaker/80-openeuler/live/riscv64.tmpl new file mode 100644 -index 0000000..1944e5a +index 0000000..5f160b5 --- /dev/null +++ b/isomaker/80-openeuler/live/riscv64.tmpl -@@ -0,0 +1,83 @@ +@@ -0,0 +1,82 @@ +<%page args="kernels, runtime_img, basearch, inroot, outroot, product, isolabel"/> +<% +configdir="tmp/config_files/riscv64" @@ -723,13 +725,13 @@ index 0000000..1944e5a + install ${f} ${f|basename} + <% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %> +%endfor -+ +\ No newline at end of file diff --git a/isomaker/80-openeuler/riscv64.tmpl b/isomaker/80-openeuler/riscv64.tmpl new file mode 100644 -index 0000000..be9d81c +index 0000000..c6afbff --- /dev/null +++ b/isomaker/80-openeuler/riscv64.tmpl -@@ -0,0 +1,76 @@ +@@ -0,0 +1,75 @@ +<%page args="kernels, runtime_img, basearch, inroot, outroot, product, isolabel"/> +<% +configdir="tmp/config_files/riscv64" @@ -805,9 +807,9 @@ index 0000000..be9d81c + install ${f} ${f|basename} + <% filegraft += " {0}={1}/{0}".format(basename(f), outroot) %> +%endfor -+ +\ No newline at end of file diff --git a/isomaker/80-openeuler/runtime-cleanup.tmpl b/isomaker/80-openeuler/runtime-cleanup.tmpl -index 256d013..898f9c7 100644 +index 8d4b423..f3c2664 100644 --- a/isomaker/80-openeuler/runtime-cleanup.tmpl +++ b/isomaker/80-openeuler/runtime-cleanup.tmpl @@ -337,8 +337,10 @@ runcmd chroot ${root} find /boot \! -name "vmlinuz*" \ @@ -847,25 +849,19 @@ index 9937e70..f38e5eb 100644 %endif installpkg rng-tools diff --git a/isomaker/config/common/livecd/live/efi.tmpl b/isomaker/config/common/livecd/live/efi.tmpl -index 9a57df4..abe9526 100644 +index fdfc489..31fe163 100644 --- a/isomaker/config/common/livecd/live/efi.tmpl +++ b/isomaker/config/common/livecd/live/efi.tmpl -@@ -11,10 +11,15 @@ mkdir ${EFIBOOTDIR}/fonts/ - install usr/share/shim/lockdown.efi ${EFIBOOTDIR}/ - %endif - %if efiarch64: -+%if efiarch64 == 'RISCV64': -+install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI -+install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64}.EFI -+%else - install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI - install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ - install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi - %endif -+%endif - install boot/efi/EFI/*/fonts/unicode.pf2 ${EFIBOOTDIR}/fonts/ - - ## actually make the EFI images +@@ -15,6 +15,9 @@ mkdir ${EFIBOOTDIR}/fonts/ + install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI + install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/BOOTLOONGARCH.EFI + install boot/efi/EFI/openEuler/grubloongarch64.efi ${EFIBOOTDIR}/grub${efiarch64|lower}.efi ++ %elif efiarch64 == 'RISCV64': ++ install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI ++ install boot/efi/EFI/*/gcd${efiarch64|lower}.efi ${EFIBOOTDIR}/grub${efiarch64}.EFI + %else: + install boot/efi/EFI/*/shim${efiarch64|lower}.efi ${EFIBOOTDIR}/BOOT${efiarch64}.EFI + install boot/efi/EFI/*/mm${efiarch64|lower}.efi ${EFIBOOTDIR}/ diff --git a/isomaker/config/riscv64/desktop_normal.xml b/isomaker/config/riscv64/desktop_normal.xml new file mode 100644 index 0000000..e69de29 @@ -885,7 +881,7 @@ index 0000000..ff54899 + diff --git a/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub.conf b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub.conf new file mode 100644 -index 0000000..7e5e934 +index 0000000..ee47854 --- /dev/null +++ b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub.conf @@ -0,0 +1,9 @@ @@ -898,9 +894,10 @@ index 0000000..7e5e934 + findiso + kernel @KERNELPATH@ @ROOT@ quiet inst.text rd.live.ram net.ifnames=0 biosdevname=0 rd.shell=0 + initrd @INITRDPATH@ +\ No newline at end of file diff --git a/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub2-efi.cfg b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub2-efi.cfg new file mode 100644 -index 0000000..aa36684 +index 0000000..182fdd2 --- /dev/null +++ b/isomaker/config/riscv64/livecd/live/config_files/riscv64/grub2-efi.cfg @@ -0,0 +1,38 @@ @@ -942,9 +939,10 @@ index 0000000..aa36684 + initrd @INITRDPATH@ + } +} +\ No newline at end of file diff --git a/isomaker/config/riscv64/livecd/live/riscv64.tmpl b/isomaker/config/riscv64/livecd/live/riscv64.tmpl new file mode 100644 -index 0000000..e7a9309 +index 0000000..9c14d3f --- /dev/null +++ b/isomaker/config/riscv64/livecd/live/riscv64.tmpl @@ -0,0 +1,75 @@ @@ -1023,9 +1021,10 @@ index 0000000..e7a9309 + ${efigraft} ${filegraft} +treeinfo images-${basearch} boot.iso images/boot.iso +%endif +\ No newline at end of file diff --git a/isomaker/config/riscv64/livecd/livecd_riscv64.ks b/isomaker/config/riscv64/livecd/livecd_riscv64.ks new file mode 100644 -index 0000000..192c4b1 +index 0000000..fba4995 --- /dev/null +++ b/isomaker/config/riscv64/livecd/livecd_riscv64.ks @@ -0,0 +1,70 @@ @@ -1099,12 +1098,13 @@ index 0000000..192c4b1 + +%packages --excludedocs +%end +\ No newline at end of file diff --git a/isomaker/config/riscv64/livecd/rpmlist b/isomaker/config/riscv64/livecd/rpmlist new file mode 100644 -index 0000000..9f80b75 +index 0000000..a35b61f --- /dev/null +++ b/isomaker/config/riscv64/livecd/rpmlist -@@ -0,0 +1,112 @@ +@@ -0,0 +1,111 @@ +NetworkManager +NetworkManager-config-server +abattis-cantarell-fonts @@ -1137,7 +1137,7 @@ index 0000000..9f80b75 +genisoimage +glibc +grub2 -+gryb2-efi-riscv64 ++grub2-efi-riscv64 +grub2-efi-riscv64-cdboot +grubby +gtk2 @@ -1185,7 +1185,6 @@ index 0000000..9f80b75 +pciutils +policycoreutils +procps-ng -+python3-bind +python3-decorator +python3-ply +python3-slip @@ -1217,9 +1216,10 @@ index 0000000..9f80b75 +xfsprogs +yum +zip +\ No newline at end of file diff --git a/isomaker/config/riscv64/normal.xml b/isomaker/config/riscv64/normal.xml new file mode 100644 -index 0000000..175a94c +index 0000000..5677a02 --- /dev/null +++ b/isomaker/config/riscv64/normal.xml @@ -0,0 +1,1569 @@ @@ -1604,7 +1604,7 @@ index 0000000..175a94c + rpmlint + + -+ ++ + dial-up + Dial-up Networking Support + 拨号网络支持 @@ -2792,9 +2792,10 @@ index 0000000..175a94c + + + +\ No newline at end of file diff --git a/isomaker/config/riscv64/standard.conf b/isomaker/config/riscv64/standard.conf new file mode 100644 -index 0000000..73bbb0b +index 0000000..83dc26d --- /dev/null +++ b/isomaker/config/riscv64/standard.conf @@ -0,0 +1,6 @@ @@ -2804,6 +2805,7 @@ index 0000000..73bbb0b +CONFIG_PRODUCT="openEuler" +CONFIG_VERSION="24.03" +CONFIG_RELEASE="LTS" +\ No newline at end of file diff --git a/isomaker/init.sh b/isomaker/init.sh index f3222ec..1166d7f 100644 --- a/isomaker/init.sh @@ -2818,7 +2820,7 @@ index f3222ec..1166d7f 100644 source "${CONFIG_FILE}" else diff --git a/isomaker/iso.sh b/isomaker/iso.sh -index 7bf0bf9..78e3392 100644 +index 3badcd7..be14649 100644 --- a/isomaker/iso.sh +++ b/isomaker/iso.sh @@ -26,7 +26,7 @@ function gen_debug_iso() @@ -2853,7 +2855,7 @@ index 7bf0bf9..78e3392 100644 mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DESKTOP_ISO_NAME}" -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -eltorito-alt-boot -e images/efiboot.img -no-emul-boot "${BUILD}"/iso [ $? != 0 ] && return 1 - elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then -+ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ] ; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o "${OUTPUT_DIR}/${DESKTOP_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso [ $? != 0 ] && return 1 fi @@ -2898,10 +2900,10 @@ index 7bf0bf9..78e3392 100644 [ $? != 0 ] && return 1 isohybrid -u /result/"${NETINST_ISO_NAME}" - elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ]; then -+ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ] ; then ++ elif [ "$ARCH" == "aarch64" ] || [ "$ARCH" == "loongarch64" ] || [ "$ARCH" == "riscv64" ]; then mkisofs -R -J -T -r -l -d -joliet-long -allow-multidot -allow-leading-dots -no-bak -V "${RELEASE_NAME}" -o /result/"${NETINST_ISO_NAME}" -e images/efiboot.img -no-emul-boot "${BUILD}"/iso fi implantisomd5 /result/"${NETINST_ISO_NAME}" -- -2.41.0 +2.45.2 diff --git a/normal_riscv64.xml b/normal_riscv64.xml index 175a94c..550acff 100644 --- a/normal_riscv64.xml +++ b/normal_riscv64.xml @@ -453,28 +453,6 @@ open-isns - - opengauss-server - openGauss Server - openGauss数据库 - openGauss is an open source relational database management system. - openGauss一款开源的关系数据库管理系统。 - true - false - - lz4-devel - protobuf-devel - snappy-devel - zstd-devel - boost-devel - libcgroup-devel - unixODBC-devel - jemalloc-devel - java-1.8.0-openjdk-devel - libedit-devel - libaio-devel - - fonts Fonts @@ -1535,7 +1513,6 @@ smb-server virtualization-hypervisor web-server - opengauss-server diff --git a/oemaker.spec b/oemaker.spec index 8bb5a96..06fc1bb 100644 --- a/oemaker.spec +++ b/oemaker.spec @@ -15,7 +15,7 @@ Summary: a building tool for DVD ISO making and ISO cutting License: Mulan PSL v2 Group: System/Management Version: 3.1.0 -Release: 13 +Release: 14 BuildRoot: %{_tmppath}/%{name} Source: https://gitee.com/openeuler/oemaker/repository/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz @@ -41,9 +41,6 @@ Requires: lorax >= 19.6.78-1 # Patch here Patch0001: 0001-fix-createrepo-data-error.patch Patch0002: add-openEuler_repo.conf-for-loongarch64.patch -%ifarch riscv64 -Patch0003: 0001-add-riscv64-support.patch -%endif Patch0004: add-loongarch64-support-for-livecd.patch Patch0005: add-ls2k500sfb.ko-for-loongarch64.patch %ifarch ppc64le @@ -52,6 +49,7 @@ Patch0007: 0002-add-config-for-arch-ppc64le.patch Patch0008: 0003-add-support-for-ppc64le-runtime-install.patch %endif Patch0009: 0004-bugfix-IABY7K.patch +Patch0010: 0001-add-riscv64-support.patch %description @@ -235,6 +233,10 @@ rm -rf %{buildroot} rm -rf $RPM_BUILD_DIR/%{name} %changelog +* Tue Jul 16 2024 Ouuleilei - 3.1.0-14 +- riscv64 rpmlist.xml exclude some packages, riscv64 normal.xml delete opengauss +- fix patch conflict + * Wed Jul 10 2024 wangchong - 3.1.0-13 - ID:NA - SUG:NA diff --git a/rpmlist_riscv64.xml b/rpmlist_riscv64.xml index c9aa0ea..d500454 100644 --- a/rpmlist_riscv64.xml +++ b/rpmlist_riscv64.xml @@ -40,6 +40,14 @@ drbd-utils gnome-boxes nodejs-grunt-contrib-watch + apache-poi + gala-anteater + gala-ops + metrics-httpasyncclient + nvwa + python3-gala-anteater + python3-keras-rl2 + zinc drbd -- Gitee