/opt/cloudlinux/venv/lib/python3.11/site-packages/__pycache__
NameSizeModeActions
clcontrollib.cpython-311.opt-1.pyc732640644editdlrm
clcontrollib.cpython-311.pyc732640644editdlrm
cldetectlib.cpython-311.opt-1.pyc245840644editdlrm
cldetectlib.cpython-311.pyc245840644editdlrm
cldiaglib.cpython-311.opt-1.pyc676420644editdlrm
cldiaglib.cpython-311.pyc676420644editdlrm
cli_utils.cpython-311.opt-1.pyc21610644editdlrm
cli_utils.cpython-311.pyc21610644editdlrm
cllicenselib.cpython-311.opt-1.pyc161930644editdlrm
cllicenselib.cpython-311.pyc161930644editdlrm
clsetuplib.cpython-311.opt-1.pyc69740644editdlrm
clsetuplib.cpython-311.pyc69740644editdlrm
clsudo.cpython-311.opt-1.pyc270110644editdlrm
clsudo.cpython-311.pyc270110644editdlrm
cl_proc_hidepid.cpython-311.opt-1.pyc61170644editdlrm
cl_proc_hidepid.cpython-311.pyc61170644editdlrm
configparser.cpython-311.pyc16510644editdlrm
ddt.cpython-311.pyc153380644editdlrm
docopt.cpython-311.pyc379350644editdlrm
getcontrolpanel.cpython-311.opt-1.pyc10220644editdlrm
getcontrolpanel.cpython-311.pyc10220644editdlrm
lveapi.cpython-311.opt-1.pyc269850644editdlrm
lveapi.cpython-311.pyc269850644editdlrm
lvectllib.cpython-311.opt-1.pyc1620120644editdlrm
lvectllib.cpython-311.pyc1620120644editdlrm
lvestat.cpython-311.opt-1.pyc71390644editdlrm
lvestat.cpython-311.pyc71390644editdlrm
mccabe.cpython-311.pyc205640644editdlrm
migration_ve1_to_v2.cpython-311.opt-1.pyc32310644editdlrm
migration_ve1_to_v2.cpython-311.pyc32310644editdlrm
pam.cpython-311.pyc101330644editdlrm
pep8ext_naming.cpython-311.pyc288400644editdlrm
py.cpython-311.pyc4520644editdlrm
pycodestyle.cpython-311.pyc1213910644editdlrm
remount_proc.cpython-311.opt-1.pyc7730644editdlrm
remount_proc.cpython-311.pyc7730644editdlrm
remove_ubc.cpython-311.opt-1.pyc103620644editdlrm
remove_ubc.cpython-311.pyc103620644editdlrm
schema.cpython-311.pyc442030644editdlrm
secureio.cpython-311.opt-1.pyc280750644editdlrm
secureio.cpython-311.pyc280750644editdlrm
six.cpython-311.pyc464220644editdlrm
typing_extensions.cpython-311.pyc1315440644editdlrm
_pyrsistent_version.cpython-311.pyc2310644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/__pycache__/cldiaglib.cpython-311.pyc (67642B)
§ ÷[Ü&æ�Šã óF—ddlZddlZddlZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z ddlmZddlmZmZmZddlZddlmZddlmZmZddlmZmZdd lmZm Z dd l!m"Z"m#Z#dd l$m%Z%m&Z&dd l'm(Z(dd l)m*Z*m+Z+ddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3ddlm4Z4ddl5m6Z6ddl7m8Z8dZ9dZ:dZ;dZdZ?dZ@de@›�ZAdZBdZCdZDdZEe dd d!g¦«ZFd"d#d#d#d#d#d#d#d#d$œ ZGd%d&d'd&d&d&d&d&d&d$œ ZHiZId(d)eHd*œeId+<d,d-eGd*œeId.<d/ZJd0ZKd1„ZLd†d3„ZMd‡d5„ZNd6„ZOd7„ZPd8„ZQeLd9¦«d:„¦«ZRd;eeSeeTffd<„ZUd=„ZVeLd>¦«d?„¦«ZWd@eTd;eFfdA„ZXeLdB¦«ePeVdC„¦«¦«¦«ZYeLdD¦«ePeVdE„¦«¦«¦«ZZeLdF¦«ePeVdG„¦«¦«¦«Z[eLdH¦«ePeVdI„¦«¦«¦«Z\eLdJ¦«dK„¦«Z]eLdL¦«eQdM„¦«¦«Z^dN„Z_eLdO¦«dP„¦«Z`eLdQ¦«dR„¦«ZaeLdS¦«dT„¦«ZbeLdU¦«eQdV„¦«¦«ZceLdW¦«dX„¦«ZdeLdY¦«eQdZ„¦«¦«ZeeLd[¦«ePd\„¦«¦«ZfeLd]¦«ePd^„¦«¦«Zgd_Zhd`Zigda¢Zjgdb¢Zkdc„Zldd„Zmde„ZneLdf¦«dg„¦«ZoeLdh¦«di„¦«ZpeLdj¦«dk„¦«Zqdl„ZrdmeTd;eeTfdn„Zsd;etfdo„Zud;etfdp„ZvdqeTd;etfdr„Zwd;eeTfds„Zxdt„Zydu„ZzeLdv¦«ePdw„¦«¦«Z{dˆdy„Z|d;eSfdz„Z}d{ej~d;eeeTfd|„Zd;eeeTfd}„Z€d~eeeTd;dfd„Z�eLd€¦«eQd�„¦«¦«Z‚eLd‚¦«eQd;eFfdƒ„¦«¦«ZƒeLd„¦«d;eFfd…„¦«Z„dS)‰éN)Ú namedtuple©Úwraps)ÚPath)ÚListÚOptionalÚTuple)Úget_hidepid_typing_from_mounts)ÚClPwdÚdrop_privileges)ÚFeatureÚis_panel_feature_supported)ÚCLEditionDetectionErrorÚis_cl_solo_edition)Úis_client_enabledÚis_cmt_disabled)ÚDEFAULT_JWT_ES_TOKEN_PATHÚDISABLE_CMT_FILE)Újwt_token_check)Ú WhmApiErrorÚ WhmApiRequest)ÚExternalProgramFailedÚdemoteÚis_litespeed_runningÚ is_ubuntuÚprocess_is_runningÚ run_commandÚservice_is_enabled_and_present)Ú is_container)ÚLimitsValidator)Úget_pkg_versionÚOKÚFAILEDÚSKIPPEDÚINTERNAL_TEST_ERRORz.decoratorssø€Ø*ˆÔ؈ ó©)r@rBs` rAr>r>rs$ø€ðððððð ÐrCFc ó—d}d}|r%d„|D¦«}||d<tj|¦«Sg}|D]?\}}}|›d|j›d|j›�} |�| ›d|›d |›d |›d �} | | ¦«Œ@d  |d |›d�gz¦«}|S)z2 Formatter of output from all of checkers z)Command for disabling this cron checker: zcldiag --disable-cron-checkerscó@—i|]\}}}|| ¦«“ŒSrD)Ú_asdict)Ú.0Úchecker_pretty_nameÚ_Ú chk_results rAú z_formatter..ƒs1€ÐhÐhÐhÑ=_Ð=PÐRSÐU_Ð" J×$6Ò$6Ñ$8Ô$8ÐhÐhÐhrCÚ total_errorsz: ú: Nú z "ú ú"z z There are z errors found.)ÚjsonÚdumpsr)r*ÚappendÚjoin) ÚdataÚ error_countÚto_jsonr*Úcmd_tmpr)rIÚchecker_public_namerKÚchecker_results rAÚ _formatterr\zsê€ð 6€CØ.€GàðØhÐhÐcgÐhÑhÔhˆØ)ˆˆNÑÝŒz˜#‰ŒÐØ €CØ@Dð#ð#Ñ<ÐÐ0°*Ø/Ð^Ð^¸ ¼Ð^Ð^ÈjÌnÐ^Ð^ˆØ Ð *Ø .Ð]Ð]°cÐ]Ð]¸WÐ]Ð]ÐGZÐ]Ð]Ð]ˆNØ � Š �>Ñ"Ô"Ð"Ð"Ø �+Š+�cÐE¨+ÐEÐEÐEÐFÑFÑ GÔ G€CØ €JrCTcóÒ—t|¦«r|g}g}d}|D]•} |¦«}n9#t$r,}ttt |¦«¦«}Yd}~nd}~wwxYw|jt tfvr|dz }| |jt|d¦«r|j nd|f¦«Œ–t|||¦«}|r#t|¦«tj|¦«||fS)NréÚ public_name)ÚcallableÚ Exceptionr(r%Úreprr)r#rTr>Úhasattrr_r\ÚprintÚsysÚexit) ÚcheckersrXÚdo_exitÚresultsÚerrorsÚfrKÚer)s rAÚrunnerrm�s-€Ý�ÑÔðØ�:ˆà€GØ €FØ ð ð ˆð Aؘ™œˆJˆJøÝð Að Að AÝ"Õ#6½¸Q¹¼Ñ@Ô@ˆJˆJˆJˆJˆJˆJøøøøð Aøøøà Œ>Ý Ý ð ð ð ð �a‰KˆFØ�Šà” Ý!(¨¨MÑ!:Ô!:ÐD�” � ÀØð ñ ô ð ð õ �W˜f gÑ .Ô .€CàðÝ ˆc‰ Œ ˆ Ý Œ�ÑÔÐØ �3ˆ;Ðsœ '§ A±"AÁAcój— t|¦«S#t$rtd|›d�¦«YdSwxYw)NzWARNING missing z function in cldetectlib.F)ÚevalÚAttributeErrorrd)r?s rAÚwrapperrq°sO€ðÝ�D‰zŒzÐøÝ ðððÝ ÐB 4ÐBÐBÐBÑCÔCÐC؈uˆuðøøøs ‚‘2±2có<‡—t‰¦«ˆfd„¦«}|S)Ncó”•— td¬¦«}n#t$rd}YnwxYw|rttt¦«S‰|i|¤ŽS)NT©Úskip_jwt_checkF)rrr(r$ÚSKIPPED_ON_SOLO_MSG)ÚargsÚkwargsÚis_solo_editionrks €rAÚcheckerz(skip_checker_on_cl_solo..checker¹slø€ð $Ý0ÀÐEÑEÔEˆOˆOøÝ&ð $ð $ð $Ø#ˆOˆOˆOð $øøøà ð ;Ý�WÕ&9Ñ:Ô:Ð :؈q�$Ð!˜&Ð!Ð!Ð!s ƒ” #¢#r©rkrzs` rAÚskip_checker_on_cl_solor|¸s3ø€Ý ˆ1�X„Xð"ð"ð"ð"ñ„Xð"ð €NrCcó<‡—t‰¦«ˆfd„¦«}|S)Ncóz•—ttj¦«sttt ¦«S‰|i|¤ŽSr=)rr ÚLVEr(r$ÚSKIPPED_WITHOUT_LVE_MSG)rwrxrks €rArzz'skip_check_without_lve..checkerÇs;ø€å)­'¬+Ñ6Ô6ð ?Ý�WÕ&=Ñ>Ô>Ð >؈q�$Ð!˜&Ð!Ð!Ð!rCrr{s` rAÚskip_check_without_lver�Æs3ø€Ý ˆ1�X„Xð"ð"ð"ð"ñ„Xð"ð €NrCz Check cagefscó,—ttd¦«S)NzuCagefs version is too old. Please run cagefsctl --sanity-check directly or upgrade it to have full cldiag integration)r(r$rDrCrAÚfake_cagefs_checkerrƒÐs€å Ýð 8ñ ô ðrCÚreturncóü—t›d�}dt›dt›d�}d}ddlm}|¦«}|� |d sd |fS|€t ¦«\}}}|s||fSt ¦«rd |fSt ¦«sd |fSd S) am Check that a server is cl+, enabled and CM isn't disabled locally The function returns True if the client has CL+ license, didn't disable CM localy and activated CM on https://cm.cloudlinux.com. The function also returns True if we can't read or parse JWT token, because we want to continue and show to client CM related errors z. is not activated on https://cm.cloudlinux.comzThe z& is disabled localy by creating file "rQúThe server has no CL+ licenser©Úget_client_data_from_jwt_tokenNÚcl_plusF)TN)Ú cm_full_namerÚclsummary.utilsrˆrrr)Úcm_is_not_activated_msgÚcm_is_disabled_localy_msgÚno_cl_plus_license_msgrˆÚ jwt_tokenÚis_validÚmessagerJs rAÚ_is_cmt_allowed_for_serverr’ÚsÕ€õ".Ð`Ð`Ð`ÐØ r¥|Ð rÐ rÕ_oÐ rÐ rÐ rÐØ<Ðà>Ð>Ð>Ð>Ð>Ð>à.Ð.Ñ0Ô0€IØÐ Y¨yÔ%9ÐàÐ,Ð,Ð,àÐÝ.Ñ0Ô0ш�'˜1Øð %ؘWÐ$Ð $ÝÑÔð0àÐ/Ð/Ð/å Ñ Ô ð.ØÐ-Ð-Ð-ð ˆ:rCcó<‡—t‰¦«ˆfd„¦«}|S)zi Decorator: Skip check if a server isn't cl+, disabled and CM is disabled locally cód•—t¦«\}}|r‰|i|¤ŽStt|¦«S)z$ Decorated function )r’r(r$)rwrxÚresultr‘rks €rAÚdecorated_functionz@skip_if_cmt_not_used_enabled_allowed..decorated_functionsIø€õ 5Ñ6Ô6‰ˆ�Ø ð &Ø�1�dÐ%˜fÐ%Ð%Ð %åÝ Ø ñ ô ð rCr)rkr–s` rAÚ$skip_if_cmt_not_used_enabled_allowedr—üs6ø€õ  ˆ1�X„Xð  ð  ð  ð  ñ„Xð  ð ÐrCzCheck existing JWT tokencó´—d}dt›dt›dt›dt›�}d}ddlm}t j t¦«stt||z¦«St¦«\}}}|r#|¦«}ttd |›d �¦«S||krttd ¦«S|d z}tt|›d|›�¦«S) z% Check an existing JWT token zJ The absence of JWT tokens is normal for the clients with volume license. z$Please check for JWT token in path "zr". %sTry running "rhn_check" for getting a new token if it is absent. Server can't collect and send statistics to z( if you don't have a correct JWT token. ú. z"JWT token doesn't have CL+ servicerr‡zJWT token is valid: "rQr†Ú)rrŠÚcl_plus_doc_msgÚwrite_to_support_msgr‹rˆÚosÚpathÚexistsr(r$rr"r#)Útoken_is_absent_msgÚmain_msgÚtoken_is_not_cl_plusrˆr•r‘rJr�s rAÚcheck_jwt_tokenr£s3€ð gÐð "Ý %ð "ð "õ+7ð "ð "õ,;ð  "ð "õ ð  "ð "ð ð@ÐØ>Ð>Ð>Ð>Ð>Ð>å Œ7�>Š>Õ3Ñ 4Ô 4ð ÝÝ Ø Ð*Ñ *ñ ô ð õ )Ñ*Ô*Ñ€FˆG�QØ ðCØ2Ð2Ñ4Ô4ˆ Ý�ÐA°YÐAÐAÐAÑBÔBÐBàÐ&Ò&Ð&ÝÝ Ø +ñ ô ð ð ˜"‰}€HÝ •V Ð5Ð5¨8Ð5Ð5Ñ 6Ô 6Ð6rCÚ service_namec ó—t|¦«\}}t|t¦«r|gn|}d}|D]'} t|d¦«rd}nŒ#t$rYŒ$wxYw|r|r|rt t d|›d�¦«Sg}|s| d¦«|s| d¦«|s| d¦«t td  |¦«›d t›d |›d t›d t›� ¦«S) a; Check that a service is present, enabled and active :param service_name: name of a service :param process_file_path: path (or list of paths) to a file which is run by a service. When a list is given, the service is considered active if *any* of the paths matches a running process. FTz Service "z " is present, enabled and activezService is not present.zService is not enabled.zService is not active.rPz1 The server can't collect and send statistics to z if service z$ isn't present, enabled and active. r™) rÚ isinstanceÚstrrÚFileNotFoundErrorr(r"rTr#rUrŠr›rœ)r¤Úprocess_file_pathÚ is_presentÚ is_enabledÚpathsÚ is_activeržÚmessagess rAÚ_check_service_stater¯9s†€õ<¸LÑIÔIÑ€J� Ý#-Ð.?ÅÑ#EÔ#EÐ \Ð Ð Ð ÐK\€EØ€IØððˆð Ý! $¨Ñ.Ô.ð Ø � Ø�ð øõ!ð ð ð Ø ˆHð øøøàð �jð  Yð ÝÝ Ø F˜ Ð FÐ FÐ Fñ ô ð ð €HØ ð3Ø�ŠÐ1Ñ2Ô2Ð2Ø ð3Ø�ŠÐ1Ñ2Ô2Ð2Ø ð2Ø�ŠÐ0Ñ1Ô1Ð1Ý ÝØ �8Š8�HÑ Ô ð "ð "Ý%ð "ð "Ø3?ð "ð "å(7ð "ð "õ ð "ð "ñ ô ðs´A Á AÁAz=Check service `cl_plus_sender` is present, enabled and activecóx—t¦«rttd¦«Sddlm}d}t ||¦«S)zL Check that service `cl_plus_sender` is present, enabled and active ú6Centralized Monitoring adaptation is still in progressr)ÚCL_PLUS_SENDER_FILE_PATHÚcl_plus_sender)rr(r$r‹r²r¯)r²r¤s rAÚcheck_cl_plus_sender_servicer´asJ€õ�~„~ð\Ý�Ð"ZÑ[Ô[Ð[à8Ð8Ð8Ð8Ð8Ð8à#€Lå   Ð.FÑ GÔ GÐGrCz cl_node_exporter let`s handle both cases: - old `node_exporter` service - renamed `cl_node_exporter` service r±z&/usr/share/cloudlinux/cl_plus/service/z+/usr/share/cloudlinux/cl_plus/node_exporterÚcl_node_exporterzcl_node_exporter.serviceÚ node_exporter)rr(r$r�ržrŸrUr¯)Úbase_service_pathr©r¤s rAÚcheck_node_exporter_servicer¹ss£€õ�~„~ð\Ý�Ð"ZÑ[Ô[Ð[à@ÐØEÐå „w‡~‚~•b”g—l’lÐ#4Ð6HÑIÔIÑJÔJð'ÍbÌgÏnÊnÝ Œ� Š Ð&Ð(BÑCÔCñOôOð'ð*ˆ ˆ à&ˆ Ý   Ð.?Ñ @Ô @Ð@rCz7Check service `lvestats` is present, enabled and activecó.—d}ddg}t||¦«S)zF Check that service `lvestats` is present, enabled and active Úlvestatsz'/usr/share/lve-stats/lvestats-server.pyz/usr/sbin/lvestats-server)r¯)r¤Úprocess_file_pathss rAÚcheck_lvestats_servicer½�s*€ð€Là1Ø#ðÐõ   Ð.@Ñ AÔ AÐArCzeCheck that the server has the minimal required packages for correct working of Centralized Monitoringc ó¸—dD]C}t|¦«€2ttd|›dt›dt›dt ›�¦«cSŒDtt d¦«S)zD Check that the server has minimal required packages for CM )zcl-end-server-toolszcl-node-exporterNz!System doesn't have the package "z". It's required for zA feature to work and it usually installed automatically by cron. r™zVSystem has the minimal required packages for correct working of Centralized Monitoring)r!r(r#rŠr›rœr")Ú package_names rAÚcheck_cmt_packagesrÀžs–€ðDð ð ˆ Ý ˜<Ñ (Ô (Ð 0ÝÝð*Ø ð*ð*Ý8Dð*ð*õ+:ð*ð*õ(ð *ð*ñôð ð ð ð 1õ •RÐqÑ rÔ rÐrrCzACheck control panel and it's configuration (for DirectAdmin only)có¦—dtdz›�}tj¦«tj¦«}|dkrt t d¦«Sd|›dtj›d�}td¬ ¦«sL|d krFtj¦«rt t|d z¦«St t|d z|z¦«St t|¦«S) NzW Fixing the issue will provide CloudLinux support on your control panel. See details: z#diag-cpr2zCan't detect contol panelzControl Panel - z ; Version ú;Trtr-z File "options.conf" is finez1 File "options.conf" has no line "cloudlinux=yes") Úcldiag_doc_linkÚdetectÚgetCPÚ getCPNamer(r$Ú CP_VERSIONrÚda_check_optionsr"r#)Úfix_motivationÚcp_nameÚres_msgs rAÚ check_cp_diagr̲sâ€ð 7Ý'¨*Ñ4ð 7ð 7ðõ „L�N„N€NÝÔÑ Ô €GØ�)ÒÐÝ�Ð"=Ñ>Ô>Ð>àH ÐHÐHµFÔ4EÐHÐHÐH€Gå ¨TÐ 2Ñ 2Ô 2ðq°wÀ-Ò7OÐ7OÝ Ô "Ñ $Ô $ð KÝ�R Ð+IÑ!IÑJÔJÐ JÝ� Ð+^Ñ!^ÐaoÑ!oÑpÔpÐpå •R˜Ñ !Ô !Ð!rCzDCheck fs.enforce_symlinksifowner is correctly enabled in sysctl confc óœ—dtdz›�}tj¦«rttd¦«S tj¦«}nM#t $r@}d}ttdtt|¦«|¦«›d�¦«cYd}~Sd}~wwxYw|dkrttd|z¦«Sttd |›�¦«S) Nz’ Fixing that issue makes server more secure against symlink attacks and enables protection of PHP configs or other sensitive files. See details: z#symlinksifownerú$Not supported for OpenVZ environmentz+To see full error run /sbin/sysctl --systemz@Some parameter in sysctl config has wrong configuration. Error: z* It`s recommended to fix it and try again ézfs.enforce_symlinksifowner = 2zfs.enforce_symlinksifowner = ) rÃrÄÚ is_openvzr(r$Úget_symlinksifownerrr#Úget_short_error_messager§r")rÉÚsymlinks_if_ownerrlÚ detailed_outs rAÚcheck_symlinksifownerrÕÇs€ð [å4CÐFXÑ4Xð [ð [ðõ ÔÑÔðJÝ�Ð"HÑIÔIÐIð Ý"Ô6Ñ8Ô8ÐÐøÝ ð ð ð ØDˆ ÝÝ ð pÝ-­c°!©f¬f°lÑCÔCð pð pð pñ ô ð ð ð ð ð ð øøøøð øøøð˜AÒÐÝ�Ð!AÀNÑ!RÑSÔSÐSÝ •RÐLÐ9JÐLÐLÑ MÔ MÐMs·A Á BÁ5B BÂBcó—|d ¦«}tdz|z}d|›d|›�}tj d¦«st t d¦«St|d¦«st t |d›d�¦«Stj |d ¦«}|€t t d |d›d �¦«S|st td |z¦«St td ¦«S)Nr4z#check-z{ Fix that issue to be sure that users run their sites inside CageFS and provide stable work of sites that are using apache z7 module. This may improve server security See details: ú/usr/sbin/cagefsctlúCagefs is not installedr5z is not enabledr6zUnable to check zU module binary for custom control panel. This feature may be added in future updates.zBinary without CageFS jail zbinary has jail) ÚlowerrÃr�ržrŸr(r$rqrÄÚcheck_binary_has_jailr#r")ÚparamsÚ module_nameÚlinkrÉÚhas_jails rAÚ binary_checkrßás(€Ø˜”.×&Ò&Ñ(Ô(€KÝ ˜YÑ &¨Ñ 4€Dð !Ø/:ð !ð !àð !ð !ðõ Œ7�>Š>Ð/Ñ 0Ô 0ð=Ý�Ð";Ñ<Ô<Ð<Ý �6Ð+Ô,Ñ -Ô -ðFÝ� V¨F¤^Ð"DÐ"DÐ"DÑEÔEÐEåÔ+¨F°:Ô,>Ñ?Ô?€HØÐÝÝ ð Q˜v fœ~ð Qð Qð Qñ ô ð ð ðQÝ�Ð!>ÀÑ!OÑPÔPÐPÝ •RÐ*Ñ +Ô +Ð+rCzCheck suexec has cagefs jailcó¢—tj¦«r#t¦«rttd¦«St t d¦«S)NzUCurrent PHP selector uses LiteSpeed, which doesn't require the patches in suEXEC bin.r9)rÄÚdetect_litespeedrr(r$rßÚBINARY_CHECK_PARAMETERSrDrCrAÚ check_suexecrãúsQ€õÔÑ Ô ð Õ%9Ñ%;Ô%;ð ÝÝ Ðlñ ô ð õ Õ/°Ô9Ñ :Ô :Ð:rCzCheck suphp has cagefs jailcó6—ttd¦«S)Nr7)rßrârDrCrAÚ check_suphprås€å Õ/°Ô8Ñ 9Ô 9Ð9rCzCheck usepam in sshd configcóΗdtdz›�}tj¦«}|€ttd¦«S|rtt d¦«Stt d|z¦«S)NzgFix the issue to provide correct work of pam_lve module with sshd and CageFS ssh sessions See details: z #check-usepamz!Unable to run "/usr/sbin/sshd -T"zConfig is finez3There is "usepam no" in "/usr/sbin/sshd -T" output )rÃrÄÚcheck_SSHd_UsePAMr(r$r"r#)rÉÚ check_results rAÚ check_use_pamré sx€ð QÝ-<¸Ñ-Nð Qð QðõÔ+Ñ-Ô-€LØÐÝ�Ð"EÑFÔFÐFàð/Ý�Ð-Ñ.Ô.Ð.å •VÐRÐUcÑcÑ dÔ dÐdrCz*Check the validity of LVE limits on servercó¼—d}d|z}d}t¦«}| ¦«}|€tt|¦«Stt|dz|z¦«S)z Validate lve limits z6https://docs.cloudlinux.com/lve-limits-validation.htmlz'Invalid LVE limits on server. See doc: zValid LVE limits on server.NrO)r Úvalidate_existing_limitsr(r"r#)Údoc_linkÚfailed_messageÚpassed_messageÚlimits_validatorr•s rAÚcheck_lve_limitsrðse€ðH€HØ>ÀÑI€NØ2€Nå&Ñ(Ô(Ðà × 6Ò 6Ñ 8Ô 8€FØ €~Ý�˜^Ñ,Ô,Ð,å •V˜^¨dÑ2°VÑ;Ñ <Ô <Ðz%check_phpselector..Os €Ð5Ð5Ð5¨4˜$Ÿ*š*™,œ,Ð5Ð5Ð5rCz Can not read z (ú)zdefault:ú:r^z+ config should have the default PHP version)ÚcgiÚfcgir7rózdoesn't support z handler in ea4/php.confÚ ruid2_moduleaIt looks like you use mod_ruid. CloudLinux PHP Selector doesn't work properly with it. How to delete mod_ruid and install mod_suexec in cPanel: https://docs.cloudlinux.com/cloudlinuxos/cloudlinux_os_components/#installing-on-cpanel-servers-with-easyapache-4-1Ú suphp_moduler7Ú lsapi_moduleróÚ suexec_moduler9zyIt looks like you do not have mod_suphp or mod_suexec installed. CloudLinux PHP Selector doesn't work properly without it)r7rÿrróz php.conf:z with z, c3ó$K—|] \}}|¯|V—Œ dSr=rD©rHÚmoduleÚ is_installeds rAú z$check_phpselector..xs-èè€Ð0sÐ0sÑ.~s-èè€Ð(kÐ(kÑ4H°F¸LÐ^jÐ(k¨Ð(kÐ(kÐ(kÐ(kÐ(kÐ(krCú])rÃr�ržrŸr(r$rÄrárr"ÚopenÚIOErrorr#Ú startswithÚsplitrúÚget_apache_modulesÚanyrUÚitems) Ú ok_prefixÚ fail_prefixÚstatusÚhandlerÚ conf_pathrkÚconfigrlÚerrrûÚ default_verÚmodulesÚcurrents rAÚcheck_phpselectorr-s+€ð#€Ið qå)Ð,@Ñ@ð qð qð qðõ Œ7�>Š>Ð2Ñ 3Ô 3ðTÝ�Ð"RÑSÔSÐSõÔÑ Ô ð6Õ%9Ñ%;Ô%;ð6Ý�˜Y¨Ñ4Ñ5Ô5Ð5ਸР>Ð >€Fà€Gà*€IÝ „w‡~‚~�iÑ Ô ñ8ð 8Ý�i ¨wÐ7Ñ7Ô7ð 6¸1Ø5Ð5°1Ð5Ñ5Ô5�ð 6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6øøåð 8ð 8ð 8Ø3 )Ð3Ð3¨qÐ3Ð3Ð3ˆCÝ�V [°3Ñ%6Ñ7Ô7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7øøøøð 8øøøðð 8ð 8ˆDØ�Š˜zÑ*Ô*ð Ø#Ÿzšz¨#™œ¨qÔ1×8Ò8Ñ:Ô:� Ø�ð ðÐKÐKÐKˆCÝ�V [°3Ñ%6Ñ7Ô7Ð 7àð 7ð 7ˆDØ�Š +Ð0Ð0Ð0Ñ1Ô1ð 7ØŸ:š: c™?œ?¨1Ô-×4Ò4Ñ6Ô6�øØ Ð;Ð ;Ð ;ØF WÐFÐFÐFˆCÝ�V [°3Ñ%6Ñ7Ô7Ð 7åÔ'Ñ)Ô)€GØÐØ ˜WÐ $Ð $ÝÝØð@ñ@ñôð ð)¨GÐ3ˆˆw‰Ø(¨GÐ3ˆˆw‰Ø*¨gÐ5ˆˆxÑÝ ��w” ¨Ô!1Ð2Ñ 3Ô 3ð ÝÝ Ø ðGñ Gñ ô ð ð ˆg„ð2˜& Ô*ð2¨wÐ:[Ð/[Ð/[à u˜Ð uÐ u t§y¢yÐ0sÐ0sÐTZ×T`ÒT`ÑTbÔTbÐ0sÑ0sÔ0sÑ'sÔ'sÐ uÐ uð õ�˜Y¨Ñ0Ñ1Ô1Ð1ð oØ") /˜3˜3°wð oð oà#ŸyšyÐ(kÐ(kÈFÏLÊLÉNÌNÐ(kÑ(kÔ(kÑkÔkð oð oð oðõ •V˜[¨3Ñ.Ñ /Ô /Ð/sBÂ)C Â; Cà C ÃCÃC ÃCÃC à DÃ* DÄ DÄDzCheck fs.symlinkown_gidcó`—dtdz›�}ttd¦«}d|z}d}tj¦«rtt d¦«Stj¦«tj} tj |¦«n)#t$rtt d|›d�¦«cYSwxYw t|d ¬ ¦«5}t|  ¦« ¦«¦«}ddd¦«n #1swxYwYn2#t$r%}tt d |›d |›�¦«cYd}~Sd}~wwxYwtj|kr|S t%j|¦«j}n#t$rg}YnwxYw|r||vr|Stt | ||¦«¦«S) Nz|Fix the issue to provide symlink protection for apache user and as a result make your Web Server more secure. See details: z#check-symlinkowngidz>Web-server user is protected by Symlink Owner Match Protectionz@Web-server user '{}' is not in protected group specified in {}. z/proc/sys/fs/symlinkown_gidrÎzThere is no web-server user [z!] on the system. Nothing to checkrõrözCan't read GID from z with error: )rÃr(r"rÄrÐr$Úget_apache_gidÚ APACHE_UNAMEÚpwdÚgetpwnamÚKeyErrorr ÚintÚreadrúrar#Ú APACHE_GIDÚgrpÚgetgrgidÚgr_memÚformat) rÉÚok_resÚ warn_msg_tplÚsymlinkown_gid_fileÚ apache_unamerkÚcurrent_symlinkown_gidrlÚ grp_memberss rAÚcheck_symlinkowngidr2ƒsH€ð Eå)Ð,BÑBð Eð Eðõ •rÐ[Ñ \Ô \€FØXÐ[iÑi€LØ7Ðå ÔÑÔðJÝ�Ð"HÑIÔIÐIå ÔÑÔÐÝÔ&€LðsÝ Œ �\Ñ"Ô"Ð"Ð"øÝ ðsðsðsÝ�Ð"qÀ,Ð"qÐ"qÐ"qÑrÔrÐrÐrÐrðsøøøð_å Ð%°Ð 8Ñ 8Ô 8ð ;¸AÝ%(¨¯ª©¬¯ªÑ)9Ô)9Ñ%:Ô%:Ð "ð ;ð ;ð ;ñ ;ô ;ð ;ð ;ð ;ð ;ð ;ð ;øøøð ;ð ;ð ;ð ;øøå ð_ð_ð_Ý�Ð!]Ð8KÐ!]Ð!]ÐZ[Ð!]Ð!]Ñ^Ô^Ð^Ð^Ð^Ð^Ð^Ð^øøøøð_øøøõÔÐ2Ò2Ð2؈ ðÝ”lÐ#9Ñ:Ô:ÔAˆ ˆ øÝ ðððØˆ ˆ ˆ ðøøøàðà ˜;Ð &Ð &؈Må •V˜\×0Ò0°Ð?RÑSÔSÑ TÔ TÐTsfÁ2BÂ#B-Â,B-Â1DÃ4DÃ6 DÄDÄDÄ DÄ DÄ D=ÄD8Ä2D=Ä8D=ÅE-Å- E<Å;E<z&Check existence of all user's packagescó ‡ ‡ ‡ ‡—dŠ d}d}gd¢Š gd¢}gŠtj¦«dkrttd¦«St j|¦«sttd¦«Stj |¦«rt j|¦«Štj |tj tj |d ¬ ¦«5}|  ¦«\}}|j }d d d ¦«n #1swxYwY|d krd |›�}tt|¦«S d„| ¦« d¦«D¦«}ˆfd„|D¦«}n1#t $r$} d| ›�}tt|¦«cYd } ~ Sd } ~ wwxYwˆ fd„t j‰ ¦«D¦«Š ˆ ˆ fd„|D¦«} | r.dd | ¦«›d�}tt|¦«Stt$d¦«S)zL Return user's packages that do not exist in /var/cpanel/packages/ z/var/cpanel/packages/z/var/cpanel/users/z/var/cpanel/suspended/)Ú undefinedÚdefaultz#cPanel Ticket System temporary userÚCustom)z /bin/grepz-ezPLAN=z-rr+úshould be run on cPanel onlyzno users on this serverT)ÚstdoutÚstderrÚcwdÚtextNrzerror getting user's packages: cóЗg|]c}| d¦«d d¦«d| d¦«d ¦«f‘ŒdS)ú=rrþr^)rrú)rHÚplans rArüz9check_existence_of_all_users_packages..Øsg€ð ð ð ØOSˆT�ZŠZ˜‰_Œ_˜QÔ × %Ò % cÑ *Ô *¨1Ô -¨t¯zªz¸#©¬¸qÔ/A×/GÒ/GÑ/IÔ/IÐ Jð ð ð rCrOcó&•—g|] \}}|‰v¯ ||f‘ŒSrDrD)rHÚuserÚpkgÚsuspended_userss €rArüz9check_existence_of_all_users_packages..Üs-ø€ÐmÐmÐm©i¨d°CÐQUÐ]lÐQlÐQl˜t S˜kÐQlÐQlÐQlrCz"error processing user's packages: cóŽ•—g|]A}tj tj ‰|¦«¦«¯?|‘ŒBSrD)r�ržÚisfilerU)rHÚpackageÚpackages_dir_paths €rArüz9check_existence_of_all_users_packages..âsNø€ðððØÅÄÇÂÍrÌwÏ|Ê|Ð\mÐovÑOwÔOwÑ@xÔ@xðØðððrCcó4•—g|]\}}|‰v¯ |‰v¯ |›d|›�‘ŒS)rNrD)rHr@rEÚexcluded_packages_namesÚexists_packagess €€rArüz9check_existence_of_all_users_packages..æsKø€ð!ð!ð!á ˆD�'Ø Ð1Ð 1Ð 1°gÀ_Ð6TÐ6Tð ÐÐ�7ÐÐà6TÐ6TÐ6TrCzXFound some nonexistent user's packages. List of "user: package" separated by semicolon: z; z�. If you want to apply package limits for those users - assign existing packages to them, otherwise limits will be applied incorrectly or not applied at all.z(nonexistent user's packages aren't found)rÄrÆr(r$r�ÚlistdirržrŸÚ subprocessÚPopenÚPIPEÚ communicateÚ returncoder#rúrrarUr")Úusers_dir_pathÚsuspended_dir_pathÚ user_plan_cmdÚprocÚstd_outÚstd_errÚret_coder*Úall_users_packagesrlÚnot_exists_users_packagesrHrIrFrBs @@@@rAÚ%check_existence_of_all_users_packagesrY°sÑøøøø€ð0ÐØ)€NØ1ÐØgÐgÐgÐØ6Ð6Ð6€MØ€Oå ÔÑÔ˜XÒ%Ð%Ý�Ð"@ÑAÔAÐAå Œ:�nÑ %Ô %ð=Ý�Ð";Ñ<Ô<Ð<å „w‡~‚~Ð(Ñ)Ô)ð9Ýœ*Ð%7Ñ8Ô8ˆõ Ô ØÝŒÝŒØ Ø ð  ñ ô ð#ð Ø×+Ò+Ñ-Ô-ш�Ø”?ˆð#ð#ð#ñ#ô#ð#ð#ð#ð#ð#ð#øøøð#ð#ð#ð#ð�1‚}€}Ø9°Ð9Ð9ˆÝ� Ñ%Ô%Ð%ð &ð ð ØW^×WdÒWdÑWfÔWf×WlÒWlÐmqÑWrÔWrð ñ ô ÐðnÐmÐmÐmÐ;MÐmÑmÔmÐÐøÝ ð&ð&ð&Ø6°1Ð6Ð6ˆÝ� Ñ%Ô%Ð%Ð%Ð%Ð%Ð%Ð%øøøøð&øøøð ðððÝ!œzÐ*;Ñ<Ô<ðñô€Oð!ð!ð!ð!ð!à/ð!ñ!ô!Ðð !ð&ð RØ?C¿yºyÐIbÑ?cÔ?cð Rð Rð Rð õ � Ñ%Ô%Ð%å •RÐCÑ DÔ DÐDs0à C5Ã5C9Ã<C9Ä!?E!Å! FÅ+F ÆFÆ Fz$Check all resellers's packages filescóš—tj¦«dkrttd¦«SGd„d¦«}ddlm} |¦«5|¦« ¦«ddd¦«n #1swxYwYttd¦«S#t$r,}ttt|¦«¦«cYd}~Sd}~wwxYw) zT Check reseller packages files reading on any errors Caused by LU-2374 r-z!should be run on DirectAdmin onlycó—eZdZdZd„Zd„ZdS)ú7check_da_resellers_packages_files..HiddenPrintsz= Redirect stdout to /dev/null to hide output cót—tj|_ttjdd¬¦«t_dS)NÚwrõrö)rer8Ú_original_stdoutr r�Údevnull)Úselfs rAÚ __enter__zAcheck_da_resellers_packages_files..HiddenPrints.__enter__s(€Ý$'¤JˆDÔ !Ý�bœj¨#¸Ð@Ñ@Ô@�CŒJˆJˆJrCcód—tj ¦«|jt_dSr=)rer8Úcloser_)raÚexc_typeÚexc_valÚexc_tbs rAÚ__exit__z@check_da_resellers_packages_files..HiddenPrints.__exit__ s$€Ý ŒJ× Ò Ñ Ô Ð ØÔ.�CŒJˆJˆJrCN)Ú__name__Ú __module__Ú __qualname__Ú__doc__rbrhrDrCrAÚ HiddenPrintsr\s?€€€€€ð ð ð Að Að Að /ð /ð /ð /ð /rCrmr)r-Nz6all resellers packages are written in correct encoding) rÄrÆr(r$Ú clcontrollibr-Úlist_resellers_packagesr"rar#r§)rmr-rls rAÚ!check_da_resellers_packages_filesrp÷s8€õÔÑÔ˜]Ò*Ð*Ý�Ð"EÑFÔFÐFð /ð /ð /ð /ð /ñ /ô /ð /ð)Ð(Ð(Ð(Ð(Ð(ð)Ø ˆ\‰^Œ^ð 4ð 4Ø ˆK‰MŒM× 1Ò 1Ñ 3Ô 3Ð 3ð 4ð 4ð 4ñ 4ô 4ð 4ð 4ð 4ð 4ð 4ð 4øøøð 4ð 4ð 4ð 4å�ÐUÑVÔVÐVøÝ ð)ð)ð)Ý�¥ Q¡¤Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(øøøøð)øøøsBÁ BÁ A4Á( BÁ4A8Á8BÁ;A8Á<B C Â!CÂ?C ÃC z/etc/cl.selector/defaults.cfgz/etc/cl.selector/php.conf)Ú DirectiveÚDefaultÚTypeÚCommentÚRangeÚRemark)ÚvalueÚlistÚboolcóè—g}d}d}ttdd¬¦«5}| ¦«}ddd¦«n #1swxYwY|D]¥}| d¦«rŒt | ¦«¦«dkr_d} ||n%#t $r| g¦«YnwxYw|| | ¦«¦«Œœ|sd}|d z }Œ¦|S) zL Parse php.conf and split it into blocks by empty line :return: rTrôrõröNú#Fr^)r Ú PHP_CONF_PATHÚ readlinesrÚlenrúrarT)Ú line_blocksÚ block_indexÚ new_blockÚconfrVrûs rAÚparse_php_confrƒs_€ð €KØ€Kð €IÝ �m˜S¨7Ð 3Ñ 3Ô 3ð °tØ�~Š~ÑÔˆð ð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð àððˆØ �?Š?˜3Ñ Ô ð Ø Ý ˆt�zŠz‰|Œ|Ñ Ô ˜qÒ Ð ðˆIð 'ؘKÔ(Ð(Ð(øÝð 'ð 'ð 'Ø×"Ò" 2Ñ&Ô&Ð&Ð&Ð&ð 'øøøà ˜ Ô $× +Ò +¨D¯JªJ©L¬LÑ 9Ô 9Ð 9Ð 9Øð ðˆIØ ˜1Ñ ˆKøØ Ðs!ž?¿AÁA BÂB7Â6B7cóf—d}d}|D]§}| d¦«}|d ¦«tvrd}|dt|¦«›d�z}|d ¦«dkr9|d  ¦«tvrd}|dt|¦«›d �z}Œ¨||gS) NTršr=rFz Block z has wrong param rsr^z has wrong directive )rrúÚPARAM_NAME_LISTÚblock_to_stringÚTYPES)Úblockr•r*rûÚ line_partss rAÚ check_blockrŠAsÎ€Ø €FØ €CØðWðWˆØ—Z’Z ‘_”_ˆ Ø �aŒ=× Ò Ñ Ô ­Ð 7Ð 7؈FØÐN¥?°5Ñ#9Ô#9ÐNÐNÐNÑNˆCØ �aŒ=× Ò Ñ Ô  FÒ *Ð *ؘ!Œ}×"Ò"Ñ$Ô$­EÐ1Ð1Ø�ØÐV¥°uÑ'=Ô'=ÐVÐVÐVÑV�øØ �Cˆ=ÐrCcó>—d}|D]}|t|¦«zdz}Œ|S)NrO)r§)rˆÚ res_stringrûs rAr†r†Ps3€Ø€JØð3ð3ˆØ¥# d¡)¤)Ñ+¨dÑ2ˆ ˆ Ø ÐrCz"Checking /etc/cl.selector/php.confcó`—d}d|›�}d}d}tj t¦«st t dt›d�¦«St ¦«}|D]"}t|¦«\}}|o|}|r|dz|z}Œ#|st t||z¦«St td¦«S) Nz7https://docs.cloudlinux.com/custom_php_ini_options.htmlzóTo fix the issue provide valid format for /etc/cl.selector/php.conf file. It is used for PHP Selector and invalid format lead to directives misconfiguration and as a result misconfiguration of selector Please, read more about php.conf file in TršzFile z does not exist rOÚOk) r�ržrŸr|r(r$rƒrŠr#r")Úphp_ini_doc_linkrÉr•r*ÚblocksrˆÚr1Úmsg1s rAÚcheck_php_confr“WsÜ€àPÐð Ið7Gð Ið Iðð €FØ €CÝ Œ7�>Š>�-Ñ (Ô (ðLÝ�Ð"J­-Ð"JÐ"JÐ"JÑKÔKÐKÝ Ñ Ô €FØð$ð$ˆÝ˜uÑ%Ô%‰ˆˆDØ�˜BˆØ ð $ؘ‘*˜tÑ#ˆCøØ ð7Ý�  ~Ñ!5Ñ6Ô6Ð6Ý •R˜Ñ Ô ÐrCz&Checking /etc/cl.selector/defaults.cfgcóD—dtdz›�}tj t¦«st t t›d�¦«S tjdd¬¦«}|  t¦«n9#t$r,}t tt|¦«¦«cYd}~Sd}~wwxYw |  dd¦«}n9#tjtjf$rt td|z¦«cYSwxYw| ¦«D]í}| d¦«rÖ|d d…} |  |d ¦«}n#tj$rd }YnwxYw |  |d ¦«}n#tj$rd }YnwxYw||kr#|dkrt td|›d|›�¦«cS|rCd|vr?| d¦«}|D]'} | s#t&j d|›d�¦«Œ(Œît t,d¦«S)NzæDetails: this config file is used by the CL PHP selector and stores its global options, so it is important to keep needed configurations and valid syntax for PHP modules' settings to avoid selector's misconfiguration See details: z#cldiagz does not existF©Ú interpolationÚstrictÚversionsÚphpz!Default php version is undefined éÚstateÚenablerršÚdisabledzDefault php version z is disabled ú,z"Warning: Modules list for version z is strange r")rÃr�ržrŸÚDEFAULTS_CFG_PATHr(r$Ú configparserÚ ConfigParserr&rar#r§ÚgetÚ NoOptionErrorÚNoSectionErrorÚsectionsrrrer9Úwriter") rÉÚ defaults_cfgrlÚdefault_php_versionÚsectionÚ php_versionr›rÚ module_namesr4s rAÚcheck_defaults_cfgr¬os¥€ð 8õ*¨IÑ5ð 8ð 8ðõ Œ7�>Š>Õ+Ñ ,Ô ,ðIÝ�Õ%6Ð"GÐ"GÐ"GÑHÔHÐHð)Ý#Ô0¸tÈEÐRÑRÔRˆ Ø×ÒÕ+Ñ,Ô,Ð,Ð,øÝ ð)ð)ð)Ý�¥ Q¡¤Ñ(Ô(Ð(Ð(Ð(Ð(Ð(Ð(øøøøð)øøøðXØ*×.Ò.¨z¸5ÑAÔAÐÐøÝ Ô &­ Ô(CÐ DðXðXðXÝ�Ð!EÈÑ!VÑWÔWÐWÐWÐWðXøøøà×(Ò(Ñ*Ô*ðnðnˆØ × Ò ˜eÑ $Ô $ð nØ! ! " "œ+ˆKð !Ø$×(Ò(¨°'Ñ:Ô:��øÝÔ-ð !ð !ð !Ø ���ð !øøøð Ø&×*Ò*¨7°IÑ>Ô>��øÝÔ-ð ð ð Ø���ð øøøà" kÒ1Ð1°e¸zÒ6IÐ6IÝ ¥Ð)kÀ Ð)kÐ)kÐ[iÐ)kÐ)kÑlÔlÐlÐlÐlØð nؘ'�>�>Ø#*§=¢=°Ñ#5Ô#5�LØ ,ðnðn˜Ø#ðnÝœJ×,Ò,Ð-lÐR]Ð-lÐ-lÐ-lÑmÔmÐmøøÝ •R˜Ñ Ô ÐsTÁ0B B7 !B2Â,B7Â2B7Â;CÃ3DÄDÅEÅE,Å+E,Å0FÆFÆFzChecking domains compatibilitycóÖ—tj¦«dkrttd¦«Sd}d}t ¦«}|€tt |¦«Stt |¦«S)Nr+r7zÝSome domains/subdomains don't use PHP Selector because they have a non-system default version (in MultiPHP Manager) or PHP_FPM enabled. You can find their list on domains tab and pass control to PHP Selector if necessary.rŽ)rÄrÆr(r$Údomains_compatibility_checkerr"r#)rírîr•s rAÚcheck_domains_compatibilityr¯˜sh€å ÔÑÔ˜XÒ%Ð%Ý�Ð"@ÑAÔAÐAð 9ðð €Nå *Ñ ,Ô ,€FØ €~Ý�˜^Ñ,Ô,Ð,Ý •V˜^Ñ ,Ô ,Ð,rCcóh— td¦« ¦«}td¦« ¦«}n#t$rYdSwxYw| d¦«D]F}| d¦«| d¦«ks| d¦«rdSŒGdS)NÚphp_get_vhost_versionsÚphp_get_system_default_versionr˜ÚversionÚphp_fpmzIncompatible version)rÚcallrr¢)ÚdomainsÚsystem_versionÚdomains rAr®r®ªsÊ€ðÝÐ 8Ñ9Ô9×>Ò>Ñ@Ô@ˆÝ&Ð'GÑHÔH×MÒMÑOÔOˆˆøÝ ððð؈tˆtðøøøà—+’+˜jÑ)Ô)ð*ð*ˆØ × Ò ˜iÑ (Ô (¨F¯JªJ°yÑ,AÔ,AÒ AÐ AÀVÇZÂZÐPYÑEZÔEZÐ AØ)Ð)Ð)ð Bð*ð*s‚AAÁ AÁAÚdirpathcó„—tj |¦«sdSd|›�}tj| d¦«tjtjdd¬¦«}|jdkrdS |j d¦«d  d¦«d }n#t$rYdSwxYw|S) zZ Get mountpoint for dirpath directory from output of df -h {dirpath} utility. Nzdf -h rPTF)r8r9r;ÚcheckrrOr^éÿÿÿÿ) r�ržÚisdirrKÚrunrrMrOr8Ú IndexError)r¹Úget_mountpoint_cmdÚprocessÚ mounted_ons rAÚget_dir_mountpointrõsÕ€õ Œ7�=Š=˜Ñ !Ô !ð؈tØ+ 'Ð+Ð+ÐÝŒnØ× Ò  Ñ%Ô%ÝŒÝŒØ Øð ñô€GðÔ˜QÒÐØˆtðØ”^×)Ò)¨$Ñ/Ô/°Ô2×8Ò8¸Ñ=Ô=¸bÔAˆ ˆ øÝ ððð؈tˆtðøøøà ÐsÁ59B/Â/ B=Â<B=có —d}tj d¦«rltdd¬¦«5}|D]?}| d¦«r(t | d¦«d¦«}Œ@ ddd¦«n #1swxYwY|S) z[ Returns maximum uid from /etc/login.defs If file does not exist returns 60000 i`êz/etc/login.defsrõrözUID_MAX rPr¼N)r�ržrDr rr%r)Úmax_uidrkrûs rAÚ get_max_uidrÆÑsÒ€ð €GÝ „w‡~‚~Ð'Ñ(Ô(ð7Ý Ð#¨gÐ 6Ñ 6Ô 6ð 7¸!Øð 7ð 7�Ø—?’? :Ñ.Ô.ð7Ý! $§*¢*¨S¡/¤/°"Ô"5Ñ6Ô6�Gøð 7ð 7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7ð €Ns³ABÂB Bcóp—d}t| d¦«d¬¦«}t|¦«}|S)z Returns min cagefs uid z!/usr/sbin/cagefsctl --get-min-uidrPT)Úconvert_to_str)rrr%)Úget_min_uid_cmdr8Úmin_uids rAÚ get_min_uidrËßs9€ð:€OÝ ˜×.Ò.¨sÑ3Ô3ÀDÐ IÑ IÔ I€FÝ�&‰kŒk€GØ €NrCÚusernamecóB—t¦«}t¦«}||krtd|›d|›d|›�¦«‚t|¬¦«}|| ¦«vr| |¦«S| ¦«s|}n1|}| ¦«}t||¦«D] }||vr|}nŒ ||krtd|›d|›d�¦«‚d|›d|›�}t|  d ¦«d ¬ ¦«\}} } |d krt| ¦«‚|S) z™ Creates user with max available uid that greater than min cagefs uid and less than max system uid. Does nothing if user already exists. z Can't create z user: min_uid z is greater than max_uid )rÊz user: uid z is too bigz#/usr/sbin/useradd -s /bin/false -u z -m rPT)Úreturn_full_outputr) rËrÆÚ RuntimeErrorr Úget_user_full_dictÚget_uidÚ get_uid_dictÚrangerr) rÌrÊrÅÚclpwdÚ custom_uidÚused_uids_dictÚ_uidÚ useradd_cmdrOrJrs rAÚuseraddrÙéso€õ ‰mŒm€G݉mŒm€GØ�ÒÐÝÐs¨8ÐsÐsÈÐsÐsÐjqÐsÐsÑtÔtÐtÝ ˜'Ð "Ñ "Ô "€EØ�5×+Ò+Ñ-Ô-Ð-Ð-Ø�}Š}˜XÑ&Ô&Ð&à × Ò Ñ Ô ðØˆ ˆ àˆ Ø×+Ò+Ñ-Ô-ˆÝ˜' 7Ñ+Ô+ð ð ˆDؘ>Ð)Ð)Ø!� Ø�ð*ð�WÒÐÝÐW¨8ÐWÐWÀ ÐWÐWÐWÑXÔXÐXØR¸ ÐRÐRÈÐRÐR€KÝ$ [×%6Ò%6°sÑ%;Ô%;ÐPTÐUÑUÔUÑ€J��3Ø�Q‚€Ý˜3ÑÔÐØ ÐrCcóà— ttd¬¦«5}| ¦« ¦«cddd¦«S#1swxYwYn#tt f$rYnwxYwdS)zS Retrive cldiag username from file :return: username from file or None rõröN)r Ú_CLDIAG_USERNAME_FILEr&rúÚOSErrorr)rks rAÚget_username_from_filerÝ s¸€ð  Ý Õ'°'Ð :Ñ :Ô :ð $¸aØ—6’6‘8”8—>’>Ñ#Ô#ð $ð $ð $ð $ñ $ô $ð $ð $ð $ð $ð $ð $øøøð $ð $ð $ð $ð $øå •WÐ ð ð ð à ˆð øøøð ˆ4s3‚A˜&A ¾ AÁ AÁAÁAÁAÁA+Á*A+có\—t¦«}tjd¦«}| ¦«}| ¦«D]`\}}| |¦«sŒ d|›�}t | d¦«¦«ŒD#tttf$rYŒ]wxYwdS)z3 Remove all trash cldiag users from system z^cldiaguser_[a-f0-9]{21}$z/usr/sbin/userdel -r rPN) r ÚreÚcompilerÐrÚmatchrrrÜrr)Úcl_pwdÚ re_patternÚ users_dictrÌrJÚ userdel_cmds rAÚremove_all_trash_cldiag_usersræsÉ€õ‰WŒW€FÝ”Ð7Ñ8Ô8€JØ×*Ò*Ñ,Ô,€JØ!×'Ò'Ñ)Ô)ðð‰ ˆ�!à×Ò Ñ)Ô)ð Ø ð Ø<°(Ð<Ð<ˆKÝ ˜ ×)Ò)¨#Ñ.Ô.Ñ /Ô /Ð /Ð /øÝ�Õ"7Ð8ð ð ð Ø ˆDð øøøððsÁ''BÂB)Â(B)có^—d}|dg} t|¦«}n#t$rYdSwxYw|sdSdS)z\ Detect quota is activated :return: True/False - quotas activated/not activated z/usr/sbin/repquotaz-nvaFT)rr)Ú_REPQUOTA_PATHÚcmdr8s rAÚis_quota_activerê)s]€ð *€NØ ˜6Ð "€CðݘSÑ!Ô!ˆˆøÝ ððð؈uˆuðøøøð ð؈uØ ˆ4s ˆ˜ &¥&zGChecking if /var/cagefs is located on partition with disk quota enabledc óô—d}d}d}d}d}td¦«}|�>tj d¦«rtj |¦«st t d¦«Stj d ¦«st t d ¦«St¦«st t|¦«Sd}d }tj t¦«rGt¦«}|�6 tj |¦«}|j |j} } d }n#t$rYnwxYwnt!¦«|s¸t"›d t%j¦«j›�dd…}t+|¦«tj |¦«}|j |j} } t-tdd¬¦«5} |  |¦«ddd¦«n #1swxYwYn#t0t2f$rYnwxYw|›d| ›�} |›d|›d|›�} |›d|›d|›�} | dzd›}d|›d|›d�}t5t7j¦«¦«}t9||¦«}tj |¦«s"t;|  d¦«¦«t;|  d¦«¦«t?j d|gt>j!t>j"d d |tG| | ¦«itj$¥ddi¥¬¦«5}| %¦«\}}ddd¦«n #1swxYwYtM|¦«5| '¦«sGd |vrCt tP|¦«cddd¦«t;| d¦«¦«S| '¦«st1|¦«‚| )¦«ddd¦«n #1swxYwYt;| d¦«¦«n'#t;| d¦«¦«wxYwn%#tT$rt t|¦«cYSwxYwt t|¦«S)!aý Checker for check if /var/cagefs is located on partition with disk quota enabled. Algorithm for check: we trying to set cldiaguser's quota to 1 inode (so that this user can't create any file if the quota activated on this partition). Then we change uid of process to cldiaguser's uid, and try to create file with his permissions. If we can't create file (Disk quota exceeded) then it's alright and disc quota enabled. Else we warn user to enable quota on that partition. z3/var/cagefs located on partition with quota enabledz×Details: /var/cagefs located on partition with quota disabled. Please, activate quota for /var/cagefs for better security. See details: https://docs.cloudlinux.com/cloudlinux_os_components/#installation-and-update-2zYQuotas seems unworkable on this server. Please correctly setup quotas to run this checkerr×z/usr/sbin/setquotaz /var/cagefsNrØz/usr/share/cagefs-skeleton/binzCagefs is not initializedFTrJé r^rõröz --cpetc z -u z 0 0 1 1 z 0 0 0 0 édÚ02dz /var/cagefs/ú/z/etc/cl.selector/rPz /bin/touchÚLC_ALLÚC)r8r9r;Ústart_new_sessionr:Ú preexec_fnÚenvzDisk quota exceeded)+rÃr�ržr½rDr(r$rêr#rÛrÝr"r#Úpw_uidÚpw_gidr$ræÚ_CLDIAG_TEST_USENAME_PREFIXÚuuidÚuuid4ÚhexrÙr r¦rÜrr§ÚrandomrrrrKrLrMÚSTDOUTrÚenvironrNr rŸr"Úunlinkr)Ú ok_messageríÚquota_unworkable_messageÚ cagefsctlÚsetquotaÚcagefs_mountpointrÌÚis_testuser_existsÚuser_pwÚuser_uidÚuser_gidrkÚcreate_cagefs_dir_cmdÚset_quota_limit_cmdÚreset_quota_limit_cmdÚprefixÚ tempfile_dirÚ tempfile_nameÚtempfile_full_pathrSr8rJs rAÚ!check_cagefs_partition_disk_quotar:s•€ðG€Jð Zðð dðð&€IØ#€Hå*¨=Ñ9Ô9ÐØÐ ­¬¯ ª °mÑ(DÔ(DÐ ÍBÌGÏNÊNÐ[dÑLeÔLeÐ Ý�Ð";Ñ<Ô<Ð<å Œ7�=Š=Ð9Ñ :Ô :ð?Ý�Ð"=Ñ>Ô>Ð>å Ñ Ô ð1Ý� Ñ0Ô0Ð0à€HØÐÝ „w‡~‚~Õ+Ñ,Ô,ð(å)Ñ+Ô+ˆØ Ð ð *Ýœ, xÑ0Ô0�Ø%,¤^°W´^˜(�ð &*Ð"Ð"øõ ð ð ð à�ð øøøð õ &Ñ'Ô'Ð'Ø ð Ý1ÐFÐFµD´J±L´LÔ4DÐFÐFÀsÈÀsÔKˆÝ�ÑÔÐÝ”,˜xÑ(Ô(ˆØ$œ^¨W¬^�(ˆð åÕ+¨S¸7ÐCÑCÔCð "ÀqØ—’˜Ñ!Ô!Ð!ð "ð "ð "ñ "ô "ð "ð "ð "ð "ð "ð "øøøð "ð "ð "ð "øøå�Ð!ð ð ð Ø ˆDð øøøà(Ð=Ð=°8Ð=Ð=ÐØ%ÐQÐQ¨8ÐQÐQÐ>OÐQÐQÐØ'ÐSÐS¨XÐSÐSÐ@QÐSÐSÐð ;ð :Ø  3™Ð,Ð,ˆFØN¨&ÐNÐN°8ÐNÐNÐNˆLÝ¥¤ ¡¤Ñ0Ô0ˆMÝ!% l°MÑ!BÔ!BÐ Ý”7—=’= Ñ.Ô.ð >ÝÐ1×7Ò7¸Ñ<Ô<Ñ=Ô=Ð=Ý Ð+×1Ò1°#Ñ6Ô6Ñ 7Ô 7Ð 7õÔ!ؘ}Ð-Ý!”Ý!Ô(ØØ"&Ø Ý! (¨HÑ5Ô5Ø5•r”zÐ5 h° _Ð5ð ñ ô ð /ðØ ×,Ò,Ñ.Ô.‘ �˜ð /ð /ð /ñ /ô /ð /ð /ð /ð /ð /ð /øøøð /ð /ð /ð /õ! Ñ*Ô*ð ,ð ,Ø)×0Ò0Ñ2Ô2ð5Ð7LÐPVÐ7VÐ7VÝ$¥R¨Ñ4Ô4ð ,ð ,ð ,ð ,ñ ,ô ,ð ,õ Ð-×3Ò3°CÑ8Ô8Ñ 9Ô 9Ð 9Ð 9ð *×0Ò0Ñ2Ô2ð*Ý! &™/œ/Ð)Ø"×)Ò)Ñ+Ô+Ð+ð  ,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,õ Ð-×3Ò3°CÑ8Ô8Ñ 9Ô 9Ð 9Ð 9ø�KÐ-×3Ò3°CÑ8Ô8Ñ 9Ô 9Ð 9Ð 9øøøÐ 9øÝ ð;ð;ð;Ý�Ð!9Ñ:Ô:Ð:Ð:Ð:ð;øøøå •V˜^Ñ ,Ô ,Ð,sÇÃ?"D$Ä$ D1Ä0D1Æ!G&Æ8GÇ G&ÇGÇG&Ç!GÇ"G&Ç&G:Ç9G:ÈC3PÌ L1Ì% PÌ1L5Ì5PÌ8L5Ì9PÍ -O*Í8 PÎ"QÎ'7O*Ï PÏ*O.Ï.PÏ1O.Ï2PÏ5#QÐ$P<Ð<QÑQ"Ñ!Q"é cóÄ—| d¦«}t|¦«|kr7d |d|dz…dgz|| dzd…z|gz¦«S|S)a. Handles error message making it shorter, if it is bigger than max limit :param error: error message to make shorter :param detailed_out: way for user to get full error manually :param max_error_lines: max lines for error :return: initial error (less than 10 lines) short error rONrÏz...)rr~rU)ÚerrorrÔÚmax_error_linesÚ error_liness rArÒrÒ¢s�€ð—+’+˜dÑ#Ô#€KÝ ˆ;ÑÔ˜/Ò)Ð)Ø�yŠyØ Ð.˜/¨QÑ.Ð.Ô /°5°'Ñ 9¸KÈÐHXÐ\]ÑH]ÐH_ÐH_Ô<`Ñ `ÐdpÐcqÑ qñ ô ð ð €LrCcóJ—tjtjddd¬¦«}|S)zY Return true if automatic cldiag email notifications about problems enabled. Ú ENABLE_CLDIAGr=T)Ú separatorÚ default_val)rÄÚget_boolean_paramÚCL_CONFIG_FILE)Ú enable_cldiags rAÚis_email_notification_enabledr²s(€õ Ô,­VÔ-BÀOÐ_bÐptÐuÑuÔu€MØ ÐrCrcó¨—| ttd¬¦« ¦« d¦«}d„|D¦«S)zK Get list of disabled cldiag checkers from an opened ConfigParser. rš)Úfallbackržcó:—g|]}|¯| ¦«‘ŒSrDrù©rHÚitems rArüz;_get_disabled_cron_checkers_from_config..Ås%€Ð 9Ð 9Ð 9˜T°DÐ 9ˆD�JŠJ‰LŒLÐ 9Ð 9Ð 9rC)r¢Úcron_cldiag_section_nameÚcron_cldiag_checkers_param_namerúr)rÚ config_lists rAÚ'_get_disabled_cron_checkers_from_configr%»sS€ð—*’*Ý Ý'Øðñô÷ ‚e�g„g�eŠe�C‰jŒjð ð :Ð 9 [Ð 9Ñ 9Ô 9Ð9rCcóÌ— tjddtdi¬¦«}| tj¦«n#tj$rgcYSwxYwt|¦«S)z] Get list of disabled cldiag checkers that run by cron in /etc/sysconfig/cloudlinux. NFrš)r–r—Údefaults)r r¡r#r&rÄrÚErrorr%)rs rAÚ"get_list_of_disabled_cron_checkersr)Ès€ð ÝÔ*ØØå/°ðð ñ ô ˆð � Š •FÔ)Ñ*Ô*Ð*Ð*øÝ Ô ðððØˆ ˆ ˆ ðøøøõ 3°6Ñ :Ô :Ð:s‚=AÁAÁAÚdisabled_cron_checkerscóV— tjdd¬¦«}| tj¦«t | ¦«vr| t ¦«t|¦«}d}|r>t|¦«t|¦«z}d  d„|D¦«¦«}|  t t|¦«ttjdd¬ ¦«5}|  |¦«ddd¦«dS#1swxYwYdS#tjtt f$rb}t#d tj›d |›d �¦«t#d ¦«t#t$¦«t'jd¦«Yd}~dSd}~wwxYw)z] Set list of disabled cldiag checkers that run by cron in /etc/sysconfig/cloudlinux. NFr•ršržc3óK—|]}|¯|V—Œ dSr=rDr s rAr z5set_list_of_disabled_cron_checkers..ïs'èè€ÐFÐF dÀÐF˜TÐFÐFÐFÐFÐFÐFrCzw+rõröz4Can't set list of disabled cron checkers to config "z " because "rQz:Please check config's existence, integrity and permissionsr^)r r¡r&rÄrr"r¥Ú add_sectionr%ÚsetrUr#r r¦r(rrÜrdrœrerf)r*rÚcurrent_disabled_checkersrwÚmerged_checkersrkrs rAÚ"set_list_of_disabled_cron_checkersr1Üs€ðÝÔ*ØØð ñ ô ˆð � Š •FÔ)Ñ*Ô*Ð*Ý #¨6¯?ª?Ñ+<Ô+<Ð <Ð <Ø × Ò Õ7Ñ 8Ô 8Ð 8å$KÈFÑ$SÔ$SÐ!àˆØ !ð Gå!Ð"8Ñ9Ô9½CÐ@YÑŠ>Ð/Ñ 0Ô 0ð3Ý� /Ñ2Ô2Ð2õ&Ñ'Ô'¨1Ò,Ð,Ý� Ñ0Ô0Ð0Ý •R˜Ñ (Ô (Ð(rCzCheck user's low PMEM limitscó’—d}d|z}d}tj¦«}|rtt|¦«Stt|¦«S)z7 Checks low PMEM limits availability on server z5https://docs.cloudlinux.com/limits/#limits-validationzLSome user(s) on server has low PMEM LVE limit (lower than 512 MB). See doc: zCheck low PMEM limits passed)r Úis_low_pmem_limit_presentr(r#r")rìrírîr•s rAÚcheck_low_pmem_limitsr8sP€ð G€HØcÐfnÑn€NØ3€Nå Ô 6Ñ 8Ô 8€FØ ð1Ý� Ñ0Ô0Ð0Ý •R˜Ñ (Ô (Ð(rCz/Check MySQL server and client versions mismatchcóZ—t¦«sttd¦«Sd}tj |¦«sttd¦«St j|dgddd¬¦«}d|jvrttd ¦«S|d g}t j|ddd¬¦«}|j d krttd ¦«S|j d kr|›d�}ttd|›�¦«Sttd|j ›d|j  ¦«›�¦«S)z” Check for MySQL server and client version mismatch on Ubuntu systems. Uses mysqlgovernor.py to detect and provide fix recommendations. z(This checker only runs on Ubuntu systemsz*/usr/share/lve/dbgovernor/mysqlgovernor.pyzmysqlgovernor.py not foundz--helpTF)Úcapture_outputr;r»z--fix-version-mismatchz?--fix-version-mismatch option not supported by mysqlgovernor.pyz--check-version-mismatchrz&MySQL server and client versions matchr^z --fix-version-mismatchzLMySQL server and client versions mismatch detected. To fix this issue, run: zUnexpected exit code z from mysqlgovernor.py. stderr: )rr(r$r�ržrŸrKr¾r8rOr"r#r%r9rú)Úmysqlgovernor_pathÚ help_resultÚ check_cmdr•Úfix_cmds rAÚcheck_mysql_version_mismatchr?-sg€õ ‰;Œ;ðNÝ�Ð"LÑMÔMÐMàEÐõ Œ7�>Š>Ð,Ñ -Ô -ð@Ý�Ð">Ñ?Ô?Ð?õ”.Ø ˜XÐ&ØØ Øð ñô€Kð   {Ô'9Ð9Ð9Ý�Ð"cÑdÔdÐdð$Ð%?Ð@€IÝ Œ^ØØØ Øð ñô€FðÔ˜AÒÐÝ�ÐEÑFÔFÐFà Ô˜AÒÐØ'Ð@Ð@Ð@ˆÝÝ Ø dÐ[bÐ dÐ dñ ô ð õ ÝØj Ô 1ÐjÐjÐSYÔS`×SfÒSfÑShÔShÐjÐjñ ô ðrC)F)FT)r)…r r(rRr�r"rûrßrKrerøÚ collectionsrÚ functoolsrÚpathlibrÚtypingrrr Ú cldetectlibrÄÚcl_proc_hidepidr Úclcommon.clpwdr r Úclcommon.cpapir rÚclcommon.lib.cleditionrrÚclcommon.lib.cmt_utilsrrÚclcommon.lib.constsrrÚclcommon.lib.jwt_tokenrÚclcommon.lib.whmapi_librrÚclcommon.utilsrrrrrrrrÚcllimits_validatorr Úclsentry.utilsr!r"r#r$r%rÃr#r"Úcl_plus_doc_linkr›rœrŠrvr€r(Ú SUEXEC_PATHÚ SUPHP_PATHrârÛr÷r>r\rmrqr|r�rƒryr§r’r—r£r¯r´r¹r½rÀrÌrÕrßrãrårérðrr2rYrprŸr|r…r‡rƒrŠr†r“r¬r¯r®rÃr%rÆrËrÙrÝrærêrrÒrr¡r%r)r1r5r8r?rDrCrAúrSsT ððÐÐÐØ € € € Ø € € € Ø € € € Ø € € € Ø € € € Ø € € € ØÐÐÐØ € € € Ø € € € Ø"Ð"Ð"Ð"Ð"Ð"ØÐÐÐÐÐØÐÐÐÐÐØ(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(Ð(àÐÐÐØ:Ð:Ð:Ð:Ð:Ð:Ø1Ð1Ð1Ð1Ð1Ð1Ð1Ð1Ø>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ØNÐNÐNÐNÐNÐNÐNÐNðððððððððLÐKÐKÐKÐKÐKÐKÐKØ2Ð2Ð2Ð2Ð2Ð2Ø>Ð>Ð>Ð>Ð>Ð>Ð>Ð>ððððððððððððððððððð0Ð/Ð/Ð/Ð/Ð/Ø.Ð.Ð.Ð.Ð.Ð.Ø*Ð*Ð*Ð*Ð*Ð*ð €Ø €Ø €Ø+ÐàP€Ø"AÐØ(ÐØJÐØGÐ5EÐGÐG€ØpÐØ'€ ØSÐØ]Ðð ˆJØà Ø ðñ ô € ð-Ø$Ø%Ø Ø$Ø#Ø"Ø#Ø!ð ð € ð&Ø#Ø0Ø Ø#Ø"Ø!Ø"Ø ð ð € ðÐà Ø2Øð$ð$Ð˜Ñ ð Ø3Øð%ð%ИÑ!ð /ÐØ*Ððððððððð,ðððð@ððð ð ð ððð𠀈^ÑÔððñÔðð E¨$°¸´ Ð*=Ô$>ðððððDððð. €Ð 'Ñ(Ô(ð"7ð"7ñ)Ô(ð"7ðJ% sð%ÀIð%ð%ð%ð%ðP €Ð LÑMÔMØØ%ð Hð Hñ&Ô%ñÔñNÔMð Hð €Ð KÑLÔLØØ%ðAðAñ&Ô%ñÔñMÔLðAð2 €Ð FÑGÔGØØ%ð Bð Bñ&Ô%ñÔñHÔGð Bð €Ð tÑuÔuØØ%ðsðsñ&Ô%ñÔñvÔuðsð" €Ð PÑQÔQð"ð"ñRÔQð"ð( €Ð SÑTÔTØðNðNñÔñUÔTðNð0,ð,ð,ð2 €Ð +Ñ,Ô,ð;ð;ñ-Ô,ð;ð €Ð *Ñ+Ô+ð:ð:ñ,Ô+ð:ð €Ð *Ñ+Ô+ð eð eñ,Ô+ð eð €Ð 9Ñ:Ô:Øð=ð=ñÔñ;Ô:ð=ð$ €Ð 3Ñ4Ô4ðR0ðR0ñ5Ô4ðR0ðj €Ð &Ñ'Ô'Øð(Uð(UñÔñ(Ô'ð(UðV €Ð 5Ñ6Ô6ØðBEðBEñÔñ7Ô6ðBEðJ €Ð 3Ñ4Ô4Øð)ð)ñÔñ5Ô4ð)ð@4ÐØ+€ ØPÐPÐP€Ø!Ð!Ð!€ððððD ð ð ðððð €Ð 1Ñ2Ô2ððñ3Ô2ðð. €Ð 5Ñ6Ô6ð%ð%ñ7Ô6ð%ðP €Ð -Ñ.Ô.ð-ð-ñ/Ô.ð-ð"*ð*ð*ð ð¨°¬ ððððð8 �Sð ð ð ð ð�Sððððð�cð˜cððððð@  ¨¤ ð ð ð ð ðððð$ððð" €Ð VÑWÔWØðc-ðc-ñÔñXÔWðc-ðL ð ð ð ð  tððððð :°LÔ4Mð :ÐRVÐW_Ð`cÔWdÔReð :ð :ð :ð :ð;¨D°¸#´Ô,?ð;ð;ð;ð;ð(#¸tÀHÈSÄMÔ?Rð#ÐW[ð#ð#ð#ð#ðL €Ð 0Ñ1Ô1Øð)ð)ñÔñ2Ô1ð)ð2 €Ð +Ñ,Ô,Øð )˜yð )ð )ð )ñÔñ-Ô,ð )ð €Ð >Ñ?Ô?ð/ ið/ð/ð/ñ@Ô?ð/ð/ð/rC