sapconf-5.0.3-7.18.1 >  A aYp9|gӞsX@lQfGI׌GIfBaPȡʾ/N:E4 ;oU T=ngpWfNZH okCqmw VD&V}ʼn6@rc>8KMk@"uKwΞ8Lm},9Iy|ϼx9*En.%qN_%;zjZ? 1.[RV{_2oͰHc9ԭ%C7cec3249c1e54bdd7467e5469ccc1ee8c67d865c6d9be20a621995aed2ba994e2353f832c7b4868abfaedc945e02d483526c5c8e8aYp9|*l&'VΠ5;û|7J96b` D$>4WË.P~2XT_-{8@bŊΊ?ۯB|h NJ{ܩ<2m#luO]ogD2Y25^)vĺS6|TlWsOWdt^}f3|,4;~.1$XtOt5ͥM]"t1/C`wV`I6/eH9t&G`>pK<?,d   H$(04Mn  &S+?00 1 14 1 4 445[556$6<67(888'98':; '=j>r?z@FGHI8XLYT\p]^ bc)defluv wxy$z8H(Csapconf5.0.37.18.1Kernel Parameter Initializiation for SAP SystemsThe utility adjusts operating system parameters, such as kernel tuning settings and resource limits, to allow running various SAP solutions at satisfactory performance. Authors: -------- Angela Briel, Howard GuoaXsheep90LGPL-2.1-or-laterhttps://www.suse.com/Productivity/Otherhttps://www.suse.com/partners/alliance/sap/linuxnoarch if [ -x /usr/bin/systemctl ]; then test -n "$FIRST_ARG" || FIRST_ARG="$1" [ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : for service in sapconf.service ; do sysv_service=${service%.*} if [ ! -e /usr/lib/systemd/system/$service ] && [ ! -e /etc/init.d/$sysv_service ]; then mkdir -p /run/systemd/rpm/needs-preset touch /run/systemd/rpm/needs-preset/$service elif [ -e /etc/init.d/$sysv_service ] && [ ! -e /var/lib/systemd/migrated/$sysv_service ]; then /usr/sbin/systemd-sysv-convert --save $sysv_service || : mkdir -p /run/systemd/rpm/needs-sysv-convert touch /run/systemd/rpm/needs-sysv-convert/$service fi done fi touch /run/sapconf_during_pkg_inst if [ $1 -eq 1 ]; then # package initial install # check, if old config files from a former installation still exist SC=/etc/sysconfig for f in sapconf sapnote-1557506 sapnote-1680803; do if [ -f "${SC}${f}" ]; then mv "${SC}${f}" "${SC}${f}".rpmold || : fi done else # package update # to prevent sapconf related tuned error messages anytime after this # sapconf package installation switch off tuned to remove the 'active' # sapconf profile # 'tuned-adm off' is sadly the only possibility to remove an 'active' # sapconf profile # # check for active tuned systemctl -q is-active tuned && [[ $(cat /etc/tuned/active_profile) == sap-* || $(cat /etc/tuned/active_profile) == sapconf ]] && (echo "found active tuned with a sap related profile"; touch /run/sapconf_tuned_removal_started; mkdir -p /run/sapconf; touch /run/sapconf/active; tuned-adm off) || : # if the tuned profile is a sap related profile, try to switch off tuned # if 'tuned-adm off' before had worked, the profile is empty # if not try again [[ $(cat /etc/tuned/active_profile) == sap-* || $(cat /etc/tuned/active_profile) == sapconf ]] && (tuned-adm off || systemctl stop tuned.service) || : # check for enabled and/or active sapconf.service systemctl -q is-active sapconf.service && (echo "found active sapconf.service"; touch /run/sapconf_pre_actss_found) || : systemctl -q is-enabled sapconf.service && (echo "found enabled sapconf.service"; touch /run/sapconf_pre_enblss_found) || : ([ ! -f /run/sapconf_tuned_removal_started ] && [ -f /usr/lib/tuned/sapconf/script.sh ]) && touch /run/sapconf_tuned_removal_started || : if ([ -f /etc/sysconfig/sapnote-155750 ] || ([ -f /etc/sysconfig/sapnote-1680803 ] && [ ! -f /etc/sysconfig/sapnote-bobj ]) || [ -f /usr/lib/tuned/sapconf/script.sh ]); then touch /tmp/sapconf_remove_nofile || : fi fiif [ $1 -eq 1 ]; then # package initial install PNAME=sapconf SUBPNAME= SYSC_TEMPLATE=/usr/share/fillup-templates/sysconfig.$PNAME$SUBPNAME # If template not in new /usr/share/fillup-templates, fallback to old TEMPLATE_DIR if [ ! -f $SYSC_TEMPLATE ] ; then TEMPLATE_DIR=/var/adm/fillup-templates SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME fi SD_NAME="" if [ -x /bin/fillup ] ; then if [ -f $SYSC_TEMPLATE ] ; then echo "Updating /etc/sysconfig/$SD_NAME$PNAME ..." mkdir -p /etc/sysconfig/$SD_NAME touch /etc/sysconfig/$SD_NAME$PNAME /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE fi else echo "ERROR: fillup not found. This should not happen. Please compare" echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" echo "update by hand." fi touch /tmp/initial_sapconf_inst || : else # package update if [ -f /etc/sysconfig/sapnote-1557506 ]; then # covers updates from SLE12 sapconf versions < 4.1.12 mv /etc/sysconfig/sapconf /etc/sysconfig/sapconf.rpmsave || : PNAME=sapconf SUBPNAME= SYSC_TEMPLATE=/usr/share/fillup-templates/sysconfig.$PNAME$SUBPNAME # If template not in new /usr/share/fillup-templates, fallback to old TEMPLATE_DIR if [ ! -f $SYSC_TEMPLATE ] ; then TEMPLATE_DIR=/var/adm/fillup-templates SYSC_TEMPLATE=$TEMPLATE_DIR/sysconfig.$PNAME$SUBPNAME fi SD_NAME="" if [ -x /bin/fillup ] ; then if [ -f $SYSC_TEMPLATE ] ; then echo "Updating /etc/sysconfig/$SD_NAME$PNAME ..." mkdir -p /etc/sysconfig/$SD_NAME touch /etc/sysconfig/$SD_NAME$PNAME /bin/fillup -q /etc/sysconfig/$SD_NAME$PNAME $SYSC_TEMPLATE fi else echo "ERROR: fillup not found. This should not happen. Please compare" echo "/etc/sysconfig/$PNAME and $TEMPLATE_DIR/sysconfig.$PNAME and" echo "update by hand." fi # remove no longer needed 'pagecache' sysconfig file rm -f /etc/sysconfig/sapnote-1557506 || : # remove no longer needed 'ase' sysconfig file rm -f /etc/sysconfig/sapnote-1680803 || : elif [ -f /etc/sysconfig/sapnote-1680803 ]; then # covers updates from SLE12 sapconf versions >= 4.1.12 echo "covers updates from SLE12 sapconf versions >= 4.1.12" # remove pagecache section from sapconf sysconfig file # no longer supported in SLE15 sed -i '/## Path: SAP\/Note\/1557506 - Linux paging improvements/,/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf sed -i '/.*PAGECACHE_LIMIT_IGNORE_DIRTY[[:blank:]]*=.*/d' /etc/sysconfig/sapconf # bsc#1096496/bsc#1096498 # to update the comment sections in /etc/sysconfig/sapconf # does not work with /bin/fillup, but is mandatory for SAP /usr/lib/sapconf/sccu.sh || : echo "Updating /etc/sysconfig/sapconf ..." /bin/fillup -q -t /etc/sysconfig/sapconf /usr/share/fillup-templates/sysconfig.sapconf # remove no longer needed 'ase' sysconfig file rm -f /etc/sysconfig/sapnote-1680803 || : # remove no longer needed 'bobj' sysconfig file rm -f /etc/sysconfig/sapnote-bobj || : else # covers updates from SLE15 echo "covers updates from SLE15" # bsc#1096496/bsc#1096498 # to update the comment sections in /etc/sysconfig/sapconf # does not work with /bin/fillup, but is mandatory for SAP /usr/lib/sapconf/sccu.sh || : echo "Updating /etc/sysconfig/sapconf ..." /bin/fillup -q -t /etc/sysconfig/sapconf /usr/share/fillup-templates/sysconfig.sapconf fi PNAME=sapconf DEF_VAL="no" DEL_TEMPL=/usr/share/fillup-templates/$PNAME.del rm -f $DEL_TEMPL for var in SEMMSL SEMMNS SEMOPM SEMMNI ; do echo -e "#\n$var=$DEF_VAL\n" >> $DEL_TEMPL done if [ -f /etc/sysconfig/$PNAME ] ; then /bin/fillup -q -t -r -i -d "=" /etc/sysconfig/$PNAME $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ test -f /etc/sysconfig/$PNAME.new && mv /etc/sysconfig/$PNAME.new /etc/sysconfig/$PNAME fi for i in $DEL_TEMPL /etc/sysconfig/$PNAME.deleted.$$ ; do if [ -f $i ] ; then . $i rm -f $i fi done # move custom specific sapconf related tuned profiles from /etc/tuned/ # to /var/lib/sapconf/saved_configs /usr/lib/sapconf/mv_tuned_conf.sh || : # remove nofile related limits.conf entries for @sapsys @sdba @dba if [ -f /tmp/sapconf_remove_nofile ]; then lim_chg=false for ulimit_group in @sapsys @sdba @dba; do for ulimit_type in soft hard; do limits_line=$(grep -E "^${ulimit_group}[[:space:]]+${ulimit_type}[[:space:]]+nofile.+" /etc/security/limits.conf) if [ -n "$limits_line" ]; then sed -i "/$limits_line/d" /etc/security/limits.conf || : lim_chg=true fi done done [[ $lim_chg ]] && echo "Updating /etc/security/limits.conf..." || : rm -f /tmp/sapconf_remove_nofile || : fi fi sed -i '/^[^#].*[[:blank:]][[:blank:]]*=[[:blank:]][[:blank:]]*.*/s;[[:blank:]];;g' /etc/sysconfig/sapconf >/dev/null 2>&1 || : if [ -x /usr/bin/systemctl ]; then test -n "$FIRST_ARG" || FIRST_ARG="$1" [ -d /var/lib/systemd/migrated ] || mkdir -p /var/lib/systemd/migrated || : if [ "$YAST_IS_RUNNING" != "instsys" ]; then /usr/bin/systemctl daemon-reload || : fi for service in sapconf.service ; do sysv_service=${service%.*} if [ -e /run/systemd/rpm/needs-preset/$service ]; then /usr/bin/systemctl preset $service || : rm "/run/systemd/rpm/needs-preset/$service" || : elif [ -e /run/systemd/rpm/needs-sysv-convert/$service ]; then /usr/sbin/systemd-sysv-convert --apply $sysv_service || : rm "/run/systemd/rpm/needs-sysv-convert/$service" || : touch /var/lib/systemd/migrated/$sysv_service || : fi done fi # Amend logind's behaviour (bsc#1031355, bsc#1039309, bsc#1043844), there is no rollback. # Not needed any longer as the limit is removed from logind (jsc#SLE-10123) SAP_LOGIN_FILE=/etc/systemd/logind.conf.d/sap.conf if [ -f $SAP_LOGIN_FILE ]; then echo "removing no longer needed file '$SAP_LOGIN_FILE'" rm -rf $SAP_LOGIN_FILE || : fi test -n "$FIRST_ARG" || FIRST_ARG="$1" if [ "$FIRST_ARG" -eq 0 -a -x /usr/bin/systemctl ]; then # Package removal, not upgrade /usr/bin/systemctl --no-reload disable sapconf.service || : ( test "$YAST_IS_RUNNING" = instsys && exit 0 test -f /etc/sysconfig/services -a \ -z "$DISABLE_STOP_ON_REMOVAL" && . /etc/sysconfig/services test "$DISABLE_STOP_ON_REMOVAL" = yes -o \ "$DISABLE_STOP_ON_REMOVAL" = 1 && exit 0 /usr/bin/systemctl stop sapconf.service ) || : fi test -n "$FIRST_ARG" || FIRST_ARG=$1 if [ $FIRST_ARG -eq 0 ]; then # Package removal, not upgrade # revert settings - not needed, done by service_del_preun # clean up custom specific sapconf tuned configuration # move custom specific sapconf related tuned profiles from /etc/tuned/ # to /var/lib/sapconf/saved_configs [ ! -d /var/lib/sapconf/saved_configs ] && mkdir -p /var/lib/sapconf/saved_configs for prof in sapconf sap-hana sap-netweaver sap-ase sap-bobj; do if [ -f /etc/tuned/"$prof"/tuned.conf ]; then echo "moving custom profile /etc/tuned/$prof to /var/lib/sapconf/saved_configs" mv /etc/tuned/"$prof" /var/lib/sapconf/saved_configs || : fi done fi test -n "$FIRST_ARG" || FIRST_ARG="$1" if [ $1 -eq 0 ]; then # Package removal for service in sapconf.service ; do sysv_service="${service%.*}" rm "/var/lib/systemd/migrated/$sysv_service" || : done fi if [ -x /usr/bin/systemctl ]; then /usr/bin/systemctl daemon-reload || : fi if [ "$FIRST_ARG" -ge 1 ]; then # Package upgrade, not uninstall if [ -x /usr/bin/systemctl ]; then ( test "$YAST_IS_RUNNING" = instsys && exit 0 test -f /etc/sysconfig/services -a \ -z "$DISABLE_RESTART_ON_UPDATE" && . /etc/sysconfig/services test "$DISABLE_RESTART_ON_UPDATE" = yes -o \ "$DISABLE_RESTART_ON_UPDATE" = 1 && exit 0 /usr/bin/systemctl try-restart sapconf.service ) || : fi fi test -n "$FIRST_ARG" || FIRST_ARG=$1 if [ $FIRST_ARG -eq 0 ]; then if [ -f /etc/security/limits.d/sapconf-nofile.conf ]; then echo "removing no longer needed file '/etc/security/limits.d/sapconf-nofile.conf'" rm -f /etc/security/limits.d/sapconf-nofile.conf fi fi # remove no longer needed UserTasksMax setting, if still available SAP_LOGIN_FILE=/etc/systemd/logind.conf.d/sap.conf if [ -f $SAP_LOGIN_FILE ]; then echo "removing no longer needed file '$SAP_LOGIN_FILE'" rm -rf $SAP_LOGIN_FILE fi~o #r E )F/O A큤큤AA큤큤AAAaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXaXb766380fbe5b5b0af2a403f7c37b407ea1620d4dbcba93d23aa2b5e4c56debb6c2aeb3db7dfd61d436d5f048ec55633130cb550823d49f909dc1695ca9ff96b8321bbe663b75cc5f1771c302d6c2f521004416cef28c6da89f11c5e91c3fe488310df651ec3f0ab08ba4a7dc2a96adb46ec0e0ec875eb71a81251f98ee6fcb9088e45f2ab77482f5e09426e343c5352128aa16e51ce66d58101a009c33fe14c35cfafe0ea2a10b25a3edefc49815891a93b977cec27027bb8c09e368f3dcc8844b123c9e4bc78dc5f12559c0fa1f6e96cf403c40ab93decd6fb9b0d86a601f5ee0c2ad66494284e047c1a62a4685630bbaab832c7d32a7f2f67ad62ebe17c49a5259a1a5f257dd295f1fa8b68a074ea44ae6e242b6cbd947d0c6a541b633577de3e704daf2861a9b236c3da7199a8a70e7b9ed5a07293641ee1a5feac25ff276280c83c90dbd30429debc2aff8873e610fea99742523e1e70c2d18978e881fbdd02357209429b32de0606ca5bfb98436a7acb8922e78c4ff21f1e1f2088977e1service@rootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootrootsapconf-5.0.3-7.18.1.src.rpmconfig(sapconf)sapconf @ @      /bin/bash/bin/bash/bin/sh/bin/sh/bin/sh/bin/sh/usr/bin/cpupower/usr/bin/envbcconfig(sapconf)coreutilsdiffutilsfillupgreplogrotaterpmlib(CompressedFileNames)rpmlib(FileDigests)rpmlib(PayloadFilesHavePrefix)rpmlib(PayloadIsXz)sysstatsystemdsystemdsystemdsystemdsystemduuidd5.0.3-7.18.13.0.4-14.6.0-14.0-15.2-1234-24.424.14.1a^`S@^^s^\Q[[#@Z@ZЛZJ@Za@ZZ@ZkZZ8@Z&@Y@YJYaY@Y@YyYJ_Y>@Y@X-XXO@XX=mW@WzOWV@W'A@V@VIV@V +abriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comabriel@suse.comhguo@suse.comabriel@suse.comabriel@suse.comabriel@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.comhguo@suse.com- version update from 5.0.2 to 5.0.3 - adapt the activity detection of saptune to the upcoming saptune version 3 (bsc#1189496)- version update from 5.0.0 to 5.0.2 - added sapconf_check and supportconfig plugin for sapconf - change log message for 'MIN_PERF_PCT' parameter to reduce the spot light (bsc#1179524) - add additional check to detect an active saptune service (started but disabled and without any notes applied). Improve the logging message. (bsc#1182314) - enable and start sapconf.service during package update, if tuned is running with sapconf as profile (bsc#1176061) - preserve the state of the sapconf.service during the package update. Only disable the sapconf service, if saptune is active. In any other cases don't touch the state of the sapconf service. If tuned has problems and the command 'tune-adm off' does not work properly in the preinstall script of the package, try to stop the tuned service to avoid weird error messages in the log of tuned during and after the package update (bsc#1182906)- version update from 4.2.3 to 5.0.0 - check the values of the vm.dirty_* settings to be in a valid range before activating or restoring these system values. (bsc#1168067) - add a logrotate drop-in file for sapconf to control the size of the /var/log/sapconf.log logfile (bsc#1166925) - use a drop-in file in /etc/security/limits.d instead of modifying /etc/security/limits.conf directly. So during sapconf service start the ulimits for the max number of open files configured with sapconf will be written to /etc/security/limits.d/sapconf-nofile.conf. During sapconf service stop this file will be removed. During package update from version 4 to version 5 of sapconf the nofile related entries added by version 4 of sapconf will be removed from /etc/security/limits.conf. (bsc#1168840) - support multi-queued scheduler for block devices (jsc#SLE-11140, jsc#SLE-11142, jsc#SLE-11143) - remove usage of tuned from sapconf That means: Now there is only ONE configuration file for sapconf /etc/sysconfig/sapconf All trailing comment sections, which were only used for documentation purpose are now removed. All parameters of the tuned profile defined in tuned.conf governor, energy_perf_bias, min_perf_pct, force_latency and elevator are moved to /etc/sysconfig/sapconf Customer specific tuned profile changes in /etc/tuned/ are transferred to /etc/sysconfig/sapconf. The customer specific tuned profile files from /etc/tuned/sapconf are moved to /var/lib/sapconf/saved_configs. Additional parameter settings in these tuned configuration files are NOT covered by sapconf. Additional changes during package update: if sapconf with tuned support was not used during package update stop and disable the sapconf service if sapconf with tuned support was used during package update stop and disable tuned service if saptune is active during package update stop and disable sapconf service To prevent sapconf related tuned error messages anytime after the package installation we need to switch off tuned in the preinstall of the package to remove the 'active' sapconf profile before the package installation removes the no longer shipped sapconf profile files. The system tuning will be restarted after the configuration transfer in the post phase of the package installation. (jsc#SLE-10985, jsc#SLE-10987, jsc#SLE-10988)- version update from 4.2.2 to 4.2.3 - file /etc/systemd/logind.conf.d/sap.conf will be removed during the package update. It is not needed any longer as the limits for TasksMax and UserTasksMax are removed from systemd/logind (bsc#1148163, jsc#SLE-10123) - if sapconf detects an improper tuned profile during start it will write an information to the log file and the start of the sapconf service will fail to guide the administrator to the problem. (bsc#1139176) - use absolute path to script.sh in tuned.conf file (bsc#1124453) - use ';' as new delimiter for a sed command in postinstall script, because the used '%' is used and expanded by rpm macros. (bsc#1150868, bsc#1150870)- source /etc/sysconfig/sapconf entries correctly, even if the /etc filesystem is read-only (bsc#1122741) - log skipping of existing /etc/systemd/logind.conf.d/sap.conf file during package installation (bsc#1111243)- Do not change the system settings for kernel.sem. So remove the variables SEM* from sapconf. (bsc#1099101)- correct the SAP Note references in the man pages and in the sysconfig file of the sapconf package (bsc#1096498)- never ever stop or disable uuidd.socket in sapconf. It is mandatory for every SAP application running. (bsc#1093843) - remove hardcoded default value for VSZ_TMPFS_PERCENT. This allows an admin to exclude VSZ_TMPFS settings from the sysconfig file, so current system value will remain untouched. This value only got used in the previous version, if the variable VSZ_TMPFS_PERCENT was removed from the sapconf configuration file /etc/sysconfig/sapconf. If the value of the variable was only changed (increase or decrease) in the sapconf configuration file everything works fine. (bsc#1093844)- remove the no longer needed sysconfig file '/etc/sysconfig/sapnote-1680803' in any update case. (bsc#1089549)- sapconf will set ALL values specified in the file /etc/sysconfig/sapconf irrespective of the current system value. The values will be not just increase, but also decrease, if the value in the sysconfig file is lower than the current system value. All actions are logged to /var/log/sapconf.log (fate#325548) - change variable names in sysconfig file for the avoidance of doubt (bsc#1070495) - remove unnecessary TMPFS_SIZE_MIN from sysconfig file (bsc#1070496)- remove the pagecache references from the sysconfig file during the package update from SLE12 to SLE15 (bsc#1071539)- consolidate the 4 former sapconf profiles sap-hana, sap-netweaver, sap-ase and sap-bobj to one basic sapconf profile 'sapconf' as requested by SAP. If one of the former profiles is the currently active tuned profile, the active tuned profile will be reset to the 'sapconf' profile during the update installation of the package. Additionally the no longer needed sysconfig file '/etc/sysconfig/sapnote-1680803' will be removed during the package update. (fate#324489, bsc#1070504)- add directive ExecStop to the systemd unit file sapconf.service and start sapconf.service after initial package installation (fate#325363)- add system unit file sapconf.service to start tuned, uuidd.socket and sysstat during system boot and to restart tuned during package update installation so that the changes will take effect immediately (fate#325363) - remove left over pagecache limit references (bsc#1071539)- Remove sapconf legacy interface /usr/lib/systemd/system/sapconf.service /usr/sbin/SAPconf /usr/sbin/rcsapconf /usr/sbin/sapconf The man pages are adapted to reflect the changed handling. (bsc#1070505, fate#324490)- Check, if pagecache limit is available at the system. If yes, set pagecache limit according the settings in /etc/sysconfig/sapconf. If not, log a message to the log file. (bsc#1071539, fate#323778)- Refactoring sapconf parameter settings together with SAP Linux Lab. (fate#324491) - ATTENTION: One main feature of this sapconf package update to version 4.1.12 is a consolidation of all sapconf configuration settings into the central /etc/sysconfig/sapconf configuration file (except those settings related to ASE or BOBJ and those settings which can only be set via tuned.conf) This will result in a lot of configuration file changes concerning /etc/sysconfig/sapconf, /etc/sysconfig/sapnote-1557506, /usr/lib/tuned/sap-netweaver/tuned.conf and /usr/lib/tuned/sap-hana/tuned.conf. That means that your system configuration get changed after a restart of tuned or during a system reboot. Please read carefully the following information about configuration file handling before restarting tuned or rebooting the system. (bsc#1070508) - use the same tuning values for HANA and Netweaver workloads. That means the use of the same tuned.conf and script.sh file for both profiles (sap-hana and sap-netweaver) This should lead to a better base for mixed HANA and ABAB workloads on one system. (bsc#1070508) - the pagecache configuration is now integrated in the general sapconf sysconfig file and the old sysconfig file sapnote-1557506 is obsolete. As before pagecache handling is disabled by default. ATTENTION: configuration file handling during package installation. During an initial package installation the new sysconfig file, which includes the pagecache values from the former file sapnote-1557506, is copied to /etc/sysconfig/sapconf and the changes will take effect immediately after restarting tuned. During a package update previously copied /etc/sysconfig files will exist. If both files in /etc/sysconfig are unchanged - that means, there are no custom changes present - the new sysconfig file is copied to /etc/sysconfig, the old obsolete /etc/sysconfig/sapnote-1557506 is removed and the changes will take effect immediately after restarting tuned. If the file /etc/sysconfig/sapconf is unchanged - that means, there are no custom changes present - but the file /etc/sysconfig/sapnote-1557506 contains custom modifications, the new sysconfig file is copied to /etc/sysconfig, the changed values from /etc/sysconfig/sapnote-1557506 are copied to /etc/sysconfig/sapconf and /etc/sysconfig/sapnote-1557506 is moved to /etc/sysconfig/sapnote-1557506.rmpsave. The changes will take effect immediately after restarting tuned. If the file /etc/sysconfig/sapconf contains custom modifications, the new sysconfig file is copied to /etc/sysconfig as sapconf.rpmnew. Custom modifications from /etc/sysconfig/sapnote-1557506 - if available - are not merged in this new file. Please merge the needed custom modifications manually from both files into /etc/sysconfig/sapconf.rpmnew, move this file to /etc/sysconfig/sapconf and remove /etc/sysconfig/sapnote-1557506 before you restart tuned to get the changes take effect. (bsc#1070496, bsc#1070508) - The following parameters are additional specified (instead of static tuning inside the tuning script or defined in other configuration files like tuned.conf or sapnote-1557506) or changed in the central configuration file /etc/sysconfig/sapconf. vm.max_map_count, vm.dirty_bytes, vm.dirty_background_bytes, kernel.shmmni, net.ipv4.tcp_slow_start_after_idle, ksm, transparent_hugepages, numa_balancing added and value changed vm.pagecache_limit_ignore_dirty, vm.pagecache_limit_mb added and commented out kernel.shmall, kernel.shmmax, kernel.sem changed But be in mind: higher system value will ever remain unchanged. sapconf will respect higher values set by the system or by the administrator using sysctl configuration files. Values set with sysctl command will respect too, but do not survive a system reboot. Every tuning action is logged to /var/log/sapconf.log ATTENTION: configuration file handling during package installation. During an initial package installation the new sysconfig file is copied to /etc/sysconfig and the changes will take effect immediately after restarting tuned. During a package update a previously copied /etc/sysconfig file will exist. If this file in /etc/sysconfig is unchanged - that means, there are no custom changes present - the new sysconfig file is copied to /etc/sysconfig and the changes will take effect immediately after restarting tuned. If this file in /etc/sysconfig includes custom modifications, the new sysconfig file is copied to /etc/sysconfig as sapconf.rpmnew. Please merge the needed custom modifications into /etc/sysconfig/sapconf.rpmnew and move this file to /etc/sysconfig/sapconf before you restart tuned to get the changes take effect (bsc#1070494, bsc#1070495, bsc#1070496, bsc#1070508) - The following parameters were specified in tuned.conf of profile sap-hana and/or sap-netweaver before. But they are removed from tuned.conf because they are redundant, no SAP Note is mentioned it, replaced by another parameter, moved to another configuration file or commented out, because they are only valid for a special architecture or special tasks (like the [cpu] part was only valid for Intel architecture and only performance related) vm.swappiness, kernel.sched_min_granularity_ns, kernel.sched_wakeup_granularity_ns, readahead removed [cpu] section with governor, energy_perf_bias, min_perf_pct commented out vm.dirty_ratio, vm.dirty_background_ratio removed from tuned.conf replaced by vm.dirty_bytes, vm.dirty_background_bytes defined in sysconfig/sapconf kernel.sem, net.ipv4.tcp_slow_start_after_idle, transparent_hugepages moved to sysconfig/sapconf ATTENTION: these changes will take effect immediately after restarting tuned. Except the administrator is using an own copy of the tuned.conf file in /etc/tuned/ (where may be sap-hana or sap-netweaver) to set own or changed values. The tuned.conf files in /etc/tuned/ remain untouched during package installation. To get the new behaviour SAP is recommended, remove the profile copy from /etc/tuned or copy the new tuned.conf file from /usr/lib/tuned/ to /etc/tuned/ or compare the files in /etc/tuned/ with the files in /usr/lib/tuned/ manually and adjust the content, if needed. (bsc#1070494, bsc#1070495, bsc#1070496, bsc#1070503) (bsc#1048550, bsc#1064720) - Setting of UserTasksMax, a parameter of the systemd login manager, will be done in the post script during the package installation. The value is set to 'infinity'. Note: A reboot is needed after the first setup to get the change take effect. A message will indicate if a reboot is necessary. As before there is no automatic rollback. (bsc#1070386) - enable and start sysstat service during post script of the package installation (see SAP Note 1310037) (bsc#1070390) - add package requirements including a short description to the man page of sapconf and to the central configuration file /etc/sysconfig/sapconf (bsc#1070390) - Update the sapconf man page and associated man pages to reflect all the changes of sapconf package version 4.1.12 (bsc#1070506) - respect active tuned profile during reboot of the system even if it is not a 'sap' profile. sapconf only activates sap-netweaver profile by default, if NO tuned profile is actually set. (bsc#1026862) - reinsert 'elevator=noop' to tuned.conf of profile sap-hana and sap-netweaver. (bsc#1031073, bsc#1032516, bsc#1070494)- fix variable name for pagecache handling (bsc#1057986)- restrict UserTasksMax setting to os releases > 12.1- add SLE12-SP1 specific change for UserTasksMax (bsc#1039309 and comment #35 of bsc#1031355)- add a message to %post to remind the admin to restart the tuned service, if he want the configuration changes to take effect immediately (bsc#1048550)- increase MAX_MAP_COUNT_REQ to 2147483647, see SAP Note 900929 (bsc#1048550)- Update package description. - Make "tuned" a mandatory runtime dependency to address bsc#1043844. - In all tuning profiles, do not overwrite a parameter if present value is higher than optimal value. (bsc#1048550)- Amend logind's behaviour (bsc#1031355, bsc#1039309, bsc#1043844)- Add a dependency against the package sapinit-systemd-compat to prevent SAP systems to be stopped every time the SAP Host Agent is restarted (SLE12-SP1 only) (bsc#1043841)- add new profiles for SAP ASE (Sybase) and SAP BOBJ according to fate#320359.- Upgrade to upstream version 4.1.7 that addresses exactly one issue: Lee Martin and colleagues noticed that SAP HANA performs better with "force_latency=70" in its tuning profile, so the setting is now introduced to the profile. (bsc#1032516)- Upgrade to upstream version 4.1.6 that addresses exactly one issue: sapconf's sap-hana tuning profile incorrectly uses "noop" IO scheduler on disk block devices, which is not explicitly recommended by either SUSE or SAP. Performance regression showed up during benchmark runs. Hence, the IO scheduler setting is removed from tuning profile, and left to be decided by end-user. (bsc#1031073)- Use arbitrary precision calculator rather than bash's built-in integer calculator to calculate parameter values, this gets rid of all integer overflow issues observed in production. (bsc#1027411) - Apply tuning technique of Netweaver in HANA profile too. (bsc#1016795) Upgrade to upstream version 4.1.5.- "force_latency=1" is removed from HANA's configuration, so that CPUs are no longer kept busy when idling. (bsc#1025824) - Introduce complementary README.d and LICENSE files from upstream git repository.- Do not touch THP configuration in Netweaver profile, avoid inheriting configuration from high throughput profile. (bsc#994306)- Put version number in source archive name. - Fix a race condition during start (bsc#977575).- Start uuidd.socket as soon as the package is installed. Further fix bsc#983454.- Control uuidd as a step of the tuning process. Fix bsc#983454.- Introduce mandatory dependency on package tuned. Implement fate#320783.- Redo the directory structure in the source archive file. - Introduce /etc/sysconfig/sapnote-1557506 to: * Disable pagecache_limit by default. * Let user decide if and how to tune pagecache_limit. Fix bsc#966930 and bsc#971625.- Mention tuned parameters in manual pages: fix bsc#966720- Fix a misplaced optimisation routine that should have been applied to SAP HANA but in fact applied to SAP NetWeaver. (bsc#962059)- Implement fate#319480 - [ECO] Include tuned architecture in sapconf * Replace the entire sapconf package content with tune daemon SAP profiles, * The executables remain compatible with the original sapconf implementation. * Following files are removed from package source: LGPL README SAPconf SAPconf-reconfig SAPconf.8 config.b64 functions sapconf sapconf.8 sapconf.service * Following file is added into package source: sapconf.tgz/bin/sh/bin/sh/bin/sh/bin/shsheep90 1629444335 5.0.3-7.18.15.0.3-7.18.1 sapconfsapconfcommon.shmv_tuned_conf.shsapconfsccu.shutil.shsupportconfigpluginssapconfsapconf.servicercsapconfsapconf_checksysconfig.sapconfsapconf.5.gzsapconf.7.gzsapconfsaved_configssaved_state/etc/logrotate.d//usr/lib//usr/lib/sapconf//usr/lib/supportconfig//usr/lib/supportconfig/plugins//usr/lib/systemd/system//usr/sbin//usr/share/fillup-templates//usr/share/man/man5//usr/share/man/man7//var/lib//var/lib/sapconf/-fmessage-length=0 -grecord-gcc-switches -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector-strong -funwind-tables -fasynchronous-unwind-tables -fstack-clash-protection -gobs://build.suse.de/SUSE:Maintenance:20913/SUSE_SLE-15_Update/b4d5cd9d9e510c6c54a63ba8fe49c91d-sapconf.SUSE_SLE-15_Updatecpioxz5noarch-suse-linuxASCII textdirectoryBourne-Again shell script, ASCII text executableBourne-Again shell script, UTF-8 Unicode text executableUTF-8 Unicode texttroff or preprocessor input, UTF-8 Unicode text, with very long lines (gzip compressed data, max compression, from Unix)troff or preprocessor input, ASCII text, with very long lines (gzip compressed data, max compression, from Unix)RRRRR}g 娲E# Use a real bash script with an explicit "exit 0" at the end to be by default fail safe # an explicit "exit 1" must be use to enforce package install/upgrade/erase failure where needed # see the "Shared_libraries" section in http://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets # Begin refresh systemd units and clean up possibly obsolete systemd units # The following is a generic way how to refresh and/or clean up systemd units. # A systemd unit may need a refresh after updating a package when the new package # had installed a changed systemd unit file for an enabled systemd unit. # A systemd unit may become obsolete by updating a package (see bnc#904215). # A systemd unit is considered to have become obsolete when the systemd # symlink /etc/systemd/system/.../unit_name -> /path/to/unit_file is broken. # When during package update the new package does no longer provide a unit file # then the systemd symlink becomes broken after the files of the old package # had been actually removed by RPM. # According to /usr/share/doc/packages/rpm/manual/triggers and according # to https://en.opensuse.org/openSUSE:Packaging_scriptlet_snippets#Scriptlet_Ordering # and http://fedoraproject.org/wiki/Packaging:ScriptletSnippets#Scriptlet_Ordering # from the new package only "posttrans of new package" is run after "removal of old package" # so that the new package must do the clean up as RPM posttrans scriptlet. if systemctl --quiet is-enabled sapconf.service 2>/dev/null; then # Refresh still valid enabled systemd units and clean up possibly obsoleted systemd units: # Enforce systemd to use the current unit file which is usually the unit file of the new package # but also in case of custom units (that use other unit files) a "reenable" won't hurt because # "reenable" does not implicitly stop a running service which is "the right thing" because # a RPM package installation must not automatically disrupt (restart) a running service. # Using "--force reenable" is essential to clean up possibly conflicting/broken symlinks. # (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"): systemctl --quiet --force reenable sapconf.service 2>/dev/null || : else # Refresh still valid disabled systemd units and clean up possibly obsoleted systemd units: # First using "--force reenable" is essential to clean up possibly conflicting/broken symlinks # because there is no "--force disable" that would clean up possibly conflicting/broken symlinks # see https://bugzilla.opensuse.org/show_bug.cgi?id=904215#c34 # so that first the unit has a clean state and then it is set back to disabled (as it was before). # If a disabled systemd unit has become obsoleted, "systemctl --force reenable" will clean it up # which means the unit gets removed and the subsequent "systemctl disable" will do nothing. # (without "|| :" build fails with "Failed to get D-Bus connection: No connection to service manager. posttrans script ... failed"): systemctl --quiet --force reenable sapconf.service 2>/dev/null || : systemctl --quiet disable sapconf.service 2>/dev/null || : fi rm -f /run/sapconf_during_pkg_inst if [ -f /tmp/initial_sapconf_inst ]; then # package initial install rm -f /tmp/initial_sapconf_inst || : # if saptune is active - stop and disable sapconf service # (jsc#SLE-10987 decision) if (systemctl -q is-active saptune) || [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "saptune" || $(ls -A /var/lib/saptune/saved_state 2>/dev/null) || $(ls -A /run/saptune/saved_state 2>/dev/null) ]]; then echo "saptune is active, stop and disable sapconf service" systemctl stop sapconf.service || : systemctl disable sapconf.service || : elif [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "" && ! -f /run/sapconf/active ]]; then systemctl start sapconf.service || : fi else # package update # check sapconf service state before update sapconfServEnable=false sapconfServActive=false if [ -f /run/sapconf_pre_enblss_found ] && [ -f /run/sapconf_pre_actss_found ]; then echo "sapconf service was active and enabled before, stay with it" rm -f /run/sapconf_pre_enblss_found /run/sapconf_pre_actss_found || : sapconfServEnable=true sapconfServActive=true fi if [ -f /run/sapconf_pre_enblss_found ]; then echo "sapconf service was enabled before, stay with it" rm -f /run/sapconf_pre_enblss_found || : sapconfServEnable=true fi if [ -f /run/sapconf_pre_actss_found ]; then echo "sapconf service was active before, stay with it" rm -f /run/sapconf_pre_actss_found || : sapconfServActive=true fi # if sapconf with tuned support was not used - stop and disable sapconf service # (jsc#SLE-10987 decision) if [ ! -f /run/sapconf/active ] && [ -f /run/sapconf_tuned_removal_started ]; then echo "sapconf with tuned support was not used" if [ "$sapconfServEnable" == "true" ]; then echo "but sapconf.service was enabled, so skip disable sapconf service" else echo "disable sapconf service" systemctl disable sapconf.service || : fi if [ "$sapconfServActive" == "true" ]; then echo "but sapconf.service was active, so skip stopping sapconf servi ce" else echo "stop sapconf service" systemctl stop sapconf.service || : fi fi # if sapconf with tuned support was used - stop and disable tuned service # (jsc#SLE-10987 decision) # and enable and start sapconf service (bsc#1176061) ([ -f /run/sapconf/active ] && [ -f /run/sapconf_tuned_removal_started ]) && (echo "sapconf with tuned support was used, stop and disable tuned service, enable and start sapconf service"; systemctl stop tuned.service; systemctl disable tuned.service; systemctl enable sapconf.service; systemctl reload-or-restart sapconf.service) || : # if saptune is active - stop and disable sapconf service # (jsc#SLE-10987 decision) systemctl -q is-active saptune || [[ $(cat /etc/tuned/active_profile 2>/dev/null) == "saptune" || $(ls -A /var/lib/saptune/saved_state 2>/dev/null) || $(ls -A /run/saptune/saved_state 2>/dev/null) ]] && (echo "saptune is active, stop and disable sapconf service"; systemctl stop sapconf.service; systemctl disable sapconf.service) || : # cleanup 'sapconf with tuned support' indicator rm -f /run/sapconf_tuned_removal_started || : # if sapconf is/was active - reload new configuration (systemctl -q is-active sapconf && [ -f /run/sapconf/active ] ) && systemctl reload sapconf.service || : # remove active indicator, so that a restart of sapconf after the package # installation will work correctly, side effect found by bsc#1176061 ! (systemctl -q is-active sapconf) && rm -f /run/sapconf/active || : fi exit 0/bin/bashcronutf-8cbedf08023ba33ff83806697ac9494930aea404ef292f86e5f79bdd2d3be4c46?P7zXZ !t/G_c] crv(vX0&i+9?Hl@]0NES{N0{?j̇:}PGH`Y3+ob2 Eic8 %mvvsCJɅI`ի2k:;?Q yrzG}@X]0 'H͎D(nHLs=Q^-&o&i6J&JU~Iȓ||ki״b-2 U\*(8xX6Y8s B%>=}>Ok9YO,,YQݶ%6εykW?3)JK-D Em!>Фci8uћd{6@Gɤ~Cҏ#icq.-n$.\]F.UtguerSnF9A&gxՋHB2CQ!7<o ZQUq{l4W;B['b';B'~PM(V۟Hso\ew,::/~c$s "mȩCxX[ WJhKVmhBޮX%DOmCysj4=cX^#u;ܙZ^+Z S#5Լc +i6R_cnF ~s:Hjn3!Z: 1=GDW>E42.^v,jM(c󟲫rEq ֗" 0}R z=;%P-//@ c/@~3(qOG hbbDI^"x۶oP!|nyǺ!T ʵʰMvȭå' ty!;uDAmB9dx67#H9A+{ܢ(QZs @^Nnk4;BtT'SEp* ۹͔qk`g6\c/!O|H=pM58tHxlmP|+[,-ׄ5m^i|WFh ŎuíaK!;w],Q_>T-s隹.U^M!j[_}呒 /+1nL]FVc7pV>.Y HWEḮqۆF-X?e=D-XolU{txkY~g*ꋆ o~.3Y 8ATj8Nz 79r1? jʏ/\ qڢ^!CnCv /@ ͅgPe 7`isB!p3G?v뢸 J&O*"ygMb[AoRuPPS!0{Q'/?@pY(rn*hˮJԐ#]*$HTfWc51Fx?ȳZ'F=p@xUJU.CxJXŔWݘDYX=Aȵ %ufQXP-V~ >|AmݎiJ! G:J .xӋWIReavjf*,m|NW !#AQmdkfYC}l8N\h.|aw[V)Ӵ/ןӷC7H8Uǘ^L1f_PYe?6K0 #-DX@@xg4e#yW֊e "3`}`@QXCCq7U=kdC~Ʉ`7Lo#̙ t|kaqu3V;SX[j}(c Ve62 ox]u̶8Z YݿbNp.IϽlւEV.$d Q%Յ9|N|N_*.+,r {G"Io#N2$d V?,L5$y qEV{(s}Up**(*d**k9"4/$siq,sVfl$lT޶$+Ң#uK!vÛ0=?Q?^:1 Ny ړe.#! qOB,m 9 }Q5R9ͭӒVTLQNs'&\?lHg_)-:H~24Fti DyayH~wR6UoY )[[Xܗ HSOL gWK.R I^&b <"\jF%d]toVhDqBӁr_:1vgԸ@|]$3lNlwԏ 4O_X>Mmn#`8}Z_ ѻ9gBԪ )B̬oL¤>:qQV`$,(VQʛ飼x0֭Up^?iN4j9уx4zH0 {;xLY|Oɣn3+ > aGC~h36l@g߭8 Y1/%;q#+1?׮W͸Ҭ *c$>Ryԉ JZt L|z\7Quϑ*s9M!iք>/1MiLO: iN"װgHý XL# 8iG<~,|/jRh_CC5w)ޟu ɋ:zX$edִ _Gu=4Y3GK+v,u=XW!3i~v}+γe뚖4;tZ6NmIgM0PB5XNۭg)u~1uK9Ru=cT6+ O9zi0s._L1,9Q&N֫3HC]E\xITjJ)#IXcmU$%PiE鲯~Wlb8%"IRE:sLH7<NK.Rws8.KVN5/|;v@H|Z_ ӁM'HK5$lFopxױbzgA*y\?3H (ɉuoWvhc p_",îS9:B!(8139VTh]I̐WQLK8q,oK#sWh&f Ȁp7 ƥx&2'9`^i˳/'r230 Ppj,@~zdJ8it o<@&EݍuYQȍ7P ᶊ;MM,-gs.:~kA[-]kl q~Ȁicꢼ?>Vwv!x[qhrM+hF܉.eV ^PfGHmǞh*$rC7-$yh=8o,3/_vJm_h4x|h1=uOTPcc ^8 E:/}oQ;0QjrFCj{j6w-WV|>w |F:ˠzg`ľݪ^fi%ͅv X[l&ߪ <+QXQKЄֶcw׍ >| -6c6*Qj~|gL ?q4~`LФC/q4,L`߸|5ՁMEKȃvݥqLػ@ ~33b1')yON'OuڼPtp4 >RN!2jnS>MF戦8k64^Χ|C,L* D+<*o ft Qdh6ҵLvYO0.ޫ}[}cX~śxEM>D|oǨ#9u}$\h& [~584fia!5Cvzώup&hRMF_9>Ol0r1ߖ!Vno 2I=8fmUD Ԯ=zyF7gKQ4 QݘV n"8U|1F|/.*lɽB!n4Ec7c*z!#eUOyTՂ0^hluߠxx[11P٪J8ď6 ݪBM C(sCUMnP=SAer]GUy `}z[ 0tg(wηKieLv9d5 NJd#ҁ֕TIСZMuzrO+ `yCSח1Z^6⨐>S%=Qs= CQ$ma;QwvҍĘyBV> όW=x>INhM4]C[~M<6𠷫Hh)6I7ۮqTosKN][ epA=c+ΚGO@hc6gf_ VIHvڜ֕ugZ\ 1NRN#L1!;AL#mA<.V*8B`)ahϰֲڍbs"4\Kk7 WyD8Fz#eL!Yknxmǿ,K&ܚv;W˼Wn-ÀEM-KpFm]qB|b⣀2aY(~=Z/όҧzn e: 1o,ELՅzTU_:B!QK&pjCxAEE$X7dɄ8ǶJ2bJc8;a7?9Ƀ!jC7uvr*A&(A1QgTo"|5nÁ5pYh?FزX(Q粁T 48oG|D6ݚBlt\cȗlRK^+{=NN/JJw53(b)31_{΀;J?ӨBMMN5W\A$Hjsg6[dUo-[n ֨&)27QJlgۍӊ>H3Ϣkw?^&ahH&99W*YJzj*.@!~Ϊ?]2iU.Q̓/(0w@G]_S\.>S"ծ*N]Dfy@Z* Z_?U/j~,:⚮ $M-s d0vb}RI`|3_wz+G%yRG_tĖVqy/15L &Ddo/_}0VUSӸwsM L ˠ10/Sr5v|pl2"0 |sq!F=\C%[S \6{և^Cۨnzwex}MGkҒHuS?l|/j x6Ϟ(!ʋ@Kt+PհPU~(]3g ';Jvʨ=~ %[xLS Uwgt$Pԕ B^y< e* i#ÒI-t.wef"2;jC@YRʅTgxA KZDD\wJb!`hp&FLP R9ܤ7ci{nEN\avGk4uܮܮ`FxLwIvQU2Xx>.iWS˩ "iQvZ*=.Jӳ-MU/걻 )^Rg:4_n/W~suC^Gx%~W5(v,kBms/Qs>(/ʔ֋V(c"94EG=0*w/ڨ A2le xd*c_|ir?Z:B?T_ޟK3^YOCh1h,!]"=W(6XEĕ2ܿShSv45AAq%= !1Ş(Gs=|CYP@M"?HhAK@a ȫZ3j'?n!=fꁞ(^S @d"5ODd@ay! $un6?zzoؘ0*?vYRO[xTVB!%8kt/}U>ԝL}ɁƔ[qvsj { d1߅`È+'s㾉KbxĘ#FoCfbh6/tV*Ȉ鮠@_|ŤMtެ'@=qHZY{r@ e7X} cJǞ9XKc,aO JF~N V(-(q])IXN~d5J9k=/&)(@d#)S1pnzS&P@R~GJF|]G~[@;P# Zpx8)zђY,7ΰ=ݲ҉e1Zq>Et8}jRTׄ7x1n-g>(~{VxϮt^gE)bf!{efGOМ,`ΧP/zXamqg[ GK1<2-$\݅/ dްTj 5ȖM7eh)R[%0P4⃒Q[UpF)K:WN`-=<ǫNچXE0n:Eao] ǨSYg2wZw̠ PBLTa] G?[caZ+H&:xMWkJA1@ Jݦ?TVa L%⚻SF_N(\.J@3!Q1B"3 K"! ;vR4ݣ#V>#J#]a  c~k6 DhvŞt4'.Yovu{ Ng-W, IZ59eX v1 _qV3*~K^rI8 K-iLtuJT_kZq"GkVr,,l~,I(m>nG| EyOxKf͓Z/ŅuΖ&E|UxG  NT\0VC_:ZB]N(T!IZnǗV]Q<wcWK9"(̄ !̰-3嬝JF[߄)h-xic3' χ4"= [BNhBWoFlX?|XsDIC7TPNvfl/zbk%^cP5 yǣJ-=ǻYJ9(ɂh`vi5F$9՘x2}U-}<'VQSϿթZ ʹ|-|uj&SQEV7;6.&.1UWnH FQ X{]4=4aH3gXK'2'D.ιդ0xRd]|o{QJZn. vfͯ9?;RdL6ǭ{*l!Z8)Dу{(o {`!ԑJEvm2ڇ'LNӛ2V3t^d(5-7~wZ2]2X_ Kb^9&/sɧg"@mdsMv߰:qIrK^ e;(mtr).>Cuַ.A}TTJ846>xsÝ:'g2kL55$}b"rK^mVgYN261[^5[0BMP*(@)0D=YD:}r[軯_;qs4jm0t+2~b\&bpiya&]B̳tЉjRz` *yoWy} wW3K0u2:f+Lz!%PeC~U[_N#$hUyHXR'遰|p3S6#`5O-a~t\u5GSt2D̰hNd:v..pO*iVJ# :8m|$Ff=癕WykH'W *qqJp䓟T-r@Gh^xbAjJd*XJ:*/E,1<-bO6mwO Ipe/]ݫjw!ى0f ω&M.-plLG:Iad| g'Ki%gP )ȾcVy kA{- eɯSr=/B*WBz6ԈTGQZMm0כ8YhwYRFHLY2Ė꒣&Pf<$'b2m@WHM֗4@!*yaHɀ7Ä 3-0]@_|t 1GwHT'׫_"2ԝ F'@=Ou>}R?:[ԳЏSŽja& LٓeE{_9K%/_, 0D!N3T ,Qoo`9Tu&dU7/Ħ3k7J(z nt^@u;Z%шrp %# d/a<|zAwd/pgݜ/ymO=}3C|[M~l|777 G)϶ ~>}3ĵ~3F/i; w2 /DJED`n- w,ixY>!H!C zFt76sIapV=;XϨ'D"M eD~s!w+=9rViķR{We‘(Zz 9Ԕlb?p((jixo|`&7iBJIIwA0ZhТ~!Κ{^a9U;Obw Y4x&__ZZY0n+Ƀ0Qe-;\)0ިA,.4:cW[<ǁ_mD!sb25 Q 2 (ԈH폗L9"@sW-!aZ)w%3TATLHc!NDq8^gM  .Y[`v n߰ưE`QS6r࠸Hn~^~=CDpn2Ts$$9g3Q?W_Q"n>³E*0^#R߫Ng:tSF~ȕ:V%FLHYP6N%P Im ]핆Q|q",=%`5Bq: 4\O'!|`⸜D:Ԗ5f4&yZ\K9Yan7 GO{E;7x:t%%X{izPr h~[aKHUj47U19Ǧ6jNf4"(pi( |STy& \F;, jĀ-{O~{ ? WJEpIGJ@\^{/;`0ks&]=1o+7qqJQk+3;pAf) lA\muuMw SADĸN':TK_F&鋢,/-T 00& kB1՚}=‘ U{cۢ󙉷3{U"2 h0R{!JwՄ \tXTUfs 3<^zICess tr c%'sӤE>>JPv)0dIw5ᧅ?\G:wE"0DX,$e,|J]H.J="bێL yF%ΉuTӂtʾŖ2 _rI|f?$h905Eas'6c7UX_9IVW(mf+1\:AW5,rMn~8%̞''zG=v]G_)..];"[ [GYsmZdǐo:Li! F"SW3Oc'LdO8߭jE aϨ^ 5M>9@M:b#.8<90r=w=_pC #%4F;d9DK?NK~6ۀ1<  R ^<œGչSMN +t;fԫEѓ*P !~Dp oBx_Ɔdvh!IYr/`jZJ8y'?nqs Qw4rqG9-s6ډsT#߁2gc9\Lnj 6=&>4[^??O=N,˝, MS$z|Uo{:`+ zxꖈMprUs+*mFC0d~D~z1~TQm|nq|@X?|w uOҦӿ3%]&z׸X=uHXS@8€Jok+wzp6 N~YMI+P(EI~]w4k ϋsQ?TFOCfKUS0`͜9=>ԧY扨W~m rjh_og` =rQE3}?'2p̀܌^8?Y"IA %U">m6VlH{W+\Ah8S `ڙKtB|ZË`Pp.]:U`9l?A(F<:B1O6V|шs0˜2ݢG\W#ߍ Zxav+_ӏ>U 8(KP\E*Δ̀24H;-3>Ұ4iqw> /|pDj> _reĒl֍&\ e^,w1ecL*:`뀸S8i9M_b.w) l!PlrxY@.{01r6/٨(I) w1]"tH>Ys{2vkFw߷R.fOSAOk#j3ЇGݡTH($ 1e vHO`dPS]5EZp7FhL#ïw_6WhM/gDM؄u@=eќ؎ү >E%'Wp&").K5^pPht7  <!>>-=i!9;;|'׍~liNO_f*m'3ԍ=4 }WqzU`ǯX>w&'}| aQj6m ߤxuT|(;Ӡ`Lz9%7F<񝑲qjV%8w&lܽVoISoʁL'>{Yչxu^c]qA8g%!A +pHɗΚel_BIU6%`U"Ԅw /ZmWÁfuUaJAN Dv% v~tj&& x~poP|FqUi \FR}Y-YX?,3؟ֽEvqal+O鿵 Pws{(%<{{3%.M'}X?e191bņlDz8}0(1Ⱥ 4Qfhv`hX~g6B JNh]eavDucET]\[Kr{EʷWO6a)S.^ST3xGk(_q"xmf ׉SeEaoUXˋ|VA_8G4=IU"m@PnEx'7l6XI$^1`# =$Cpm䈪vMpjg) w8g %kU@l.Qr:ӽzzߚꉺ2#0"]@1ֽ̇2IsD}2:\x͹ys*A*5MF&YC,Fg-;o&4X~,:qݗE2X]pS Aɂ9kJP~9.`mK@te}w#] Ayڷg<6A@a)i_Qe:4,=Zq6"d[ c)[]ơoNZqmT &moN"`R#Tˊ-U ^k'H|l Yy꫆9^o74> =d\l4%o[iwibM†:vkr%Zxf"ݾ -R ̫H_c1G'KIjUFwmZ5Xa@zyx5{zidf|0Fk/0Cwn,Oca$}s1rLj-GR΁pfޥ( ͥ}*S5i&\IX#0N,qL93r?H'@#^Hʣ4{3EfEDXzm1ѨlV+XI4ߙmh0ؾ@M0#p:]` Ζ׃^NCRQjuZzTˡVT/{+7L.njK]:+G`|ڋzQК5*QA`PȀ!'$Ta3cRb2gp?TMo'loZH08iw}|Xz)yM˪Abg0%OEx' *x*A(yR ƴBԏ٨ l1eSgQ85ҭM>6.YdGGGWJ-C ~T᱕b+,n֮ fm$-)̏0;6W=\LC fj잴R܊bVmV!oRj3WIkG6;Dk'q]d^ n~No/&@twiĭdChmF]KکQ}iԟf{&{<ebF7i`Ύ5=i _$f9*V l[x ;W4OG(tC)@9 iY\#58_aVOVo[8?NU^hH2R^?L_93W$BX@뮆DQ̦8Ҥub(ם(~9%9^}fٓ|gXv1kݮJ ykD"fD+9xD9GoM3`] 1]pwcNGα7q$${ug7\lfNSg׶Q*XEhN?"O\1Q,0,{i: gYΓfֹYGc)hHTcNhh?*GҞxFJUEUT$~ Q!8It BZmBgcGx4&H.tOi!QMtLr_RڀDm_fYuM'R'֧yQҩn+]&Mo|n{:I0 J1 q&˷p_E'` pyvDҞ!wnqdYS'#Ǻ2rrt Di5飠T{G&e2^(@,=%Kr(rB/εe ZCksj>d55:45c*%ϙT;J&]/ 8OґSi A5s"SKy=1]=,qU TRpdz-\=kr2VɃ竉]"3S =Q'foUvhF( /"FVW* 9h^ST_Mwv[ٵV'\z,9+aCa qA^J F):^$Ee@R#KtwUjfe8r*~n[Pke%r6[a[Xϕю[s-p똤6C @Q]d2>2ڛs$yQ UvR!IH⽹t$e Tܩ|ʷPK#Q$ge^t0qMzDeH!~iލ[daLoI1׵?bΥ˧, 2ƥĻCBqy6vݝ$[@3WC8&νYa*+N뮅w V+Ƕд_CȊcy- *(<3cWg"T[T8k瘯?ìO qAd'̓i8qFXW Y6z,h.c{`J/e#'5j٩FX7:ܭȻFbS3,Y" \~WYSH.6eO,牍`Ob 5Swi]Jq uwa!\%m_ رJԹ,MXObZCfA}_^)-*j$)jh@g p)ϝtJ+ ?kjc8bTk\қ<J$z2 86^eP~IY?{Bx,qjHۆS>TmbhqIųdo,w0iS#V:+2ߨ Â9 ; OfvJ&ͪ/|n92MoYf/sM/-%+͉|\+<*NwmC$(LtL'jK$:'vvgAڎpFr#CA ^s)Iz- Wt]JigZc#7^vZP/ޠ ͌+tqf<˴O#h"wo(^_fW@@)$=Q@bk@ߑgZlYF)'Ppy} Fw 9ރa4 CY|U!e9N)claO _t;=3KАܬmܜ^q-/cGI+#FL 3%*Ulwqr} 5S%5)"Ы31jrY`&2w@^Z_'*osf0UhyT1`UIPu?UoLW{M&|]9b!WZLk3?;kVYa V"]*)=[):[lZzcU:!T9: &P8+"anbdwI̞O<R?}N,, <%6\nٮ^.k=:^:45itD` |xLҗ ]>LlHy)>2,ҭs#CveO&'e[Ex4],Ȅˆ{(#j_兀 z6[Vt!.1 _&)7zgAX6{5r=/@ Fmk/2 j*e2uvBblTGOX*oB{^(mۣ!v>ZOSIl{0k3)^g5!zuKբU %38d]u.[ϯn^GG Z))Ҋ-\/jpqzW&w@-vp<Q{S9$Odrw\p 땘9{umFd<Z )`>1, x 6\AN 1-jQz> > V?$CuD׭WndY]V(l[?G~k_='tEtj=!5xQWԺ>eyFL lHqJv3? [=A C3uVWs!Stmp+9sK+,ސwXzKuDV$fde_4]ZxW"[r=,Sq*Kkb.VMI{(mC98 I 1co~Hc !,'DU[1 0C :Z?07-*AMXmޓ:'!/`%^]|mnS=ө耢֑ξPjL,]uAFv: `&&HBxyW@>|G9[h`#(ԇ!57j>1i./7T_ΣSJ3u'0C~,4 PM܀K@ⴠ_W.x`h?Z" +0Q3-1l =yEj]F/.ߍ$7vP % 7e[fl`f金ZЈ1"+ϲ!~1$61P@tyJ䎏 @UP|.c5/dPek\`/B&1 4/پs{MJVfLYy!jKnM-&-va/>o0QaKrc=$FQ]W)cuGwK!3 cbI׆ \- *hOG'DdJEqNU9T&&PYN /Z+%]A k uVWO,8Z/zIFT?o.?% єgf zXqcbAUGj>n̏lL9< Zp%Up{2 (#cY # ,p^[`e僞Њ>vCc ,f1 ֩I bG(X T Xz=_˛C%LNgEo#O+?W#Uٕ "xWD,1uY(`0O7|^z72><0J;%sAj-6xޢ9 EЁXTcVX^espw^?ΐ&ܭ/TV>5܏b|[J?󱭧\uʚM+C7~cmnX&] qinZzP)eATDDsڍ`K0*`zLAG %`np-uy)oV;)c6u=FSqʶV2>ësv2>NI>G9*ŧG'p@S݆0O|qi-QS A'Kr ˶r3(Acx߽`w:BAC08=4VOP rMGM֚rEةqh ^vn=Y6)bhbRkgZ /3|#3B GGz\^oL|ca\ w%gItSi7y ieY#g"TF{%"zcKV`ҿU8o׫s l',ģLS(]_t07 ^*vkϋ͹VPh!XYYOKS!Ɖ{ߎL)lHsYBEӶ3Y4NShe'r&ƨ]V^R[xBMUh`fm}auLw;IF#NF!TuTq_=\I"o)́&D6R?eC/ s[LA/? },cr+,E.; l!; 183j\ƥNV;@" ;7L"Y1yW$Y& C@F":7LDH D2z n,~;mJ @+${7d2S7s۰vd#TYV_T5]o@h[kY^&0.!K 3[/Q>G"7ƿf6J.1[hyKZ'[3V&EvDO xjWRer2Œ͜N׾i{' YZ