Hacked By AnonymousFox

Current Path : /opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/rpc/endpoints/__pycache__/
Upload File :
Current File : //opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/rpc/endpoints/__pycache__/base.cpython-311.pyc

�

��g�D����dZddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
mZddlm
Z
mZddlmZddlmZdd	lmZmZdd
lmZmZmZddlmZddlmZdd
lmZddl m!Z!m"Z"m#Z#ddl$m%Z%ddl&m'Z'ddl(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.ddl/m0Z0m1Z1m2Z2ddl3m4Z4m5Z5m6Z6ddl7m8Z8ddl9m:Z:ddl;m<Z=ddl>m?Z?ddl@mAZAddlBmCZCddlDmEZEmFZFmGZGejHeI��ZJedgd�d���ZKGd�d e"��ZLGd!�d"e!��ZMd#eNeOeOffd$�ZPeeeeg��Gd%�d&e!����ZQGd'�d(e"��ZRGd)�d*e"��ZSGd+�d,e"��ZTdS)-u

This program is free software: you can redistribute it and/or modify it under
the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License,
or (at your option) any later version.


This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
See the GNU General Public License for more details.


You should have received a copy of the GNU General Public License
 along with this program.  If not, see <https://www.gnu.org/licenses/>.

Copyright © 2019 Cloud Linux Software Inc.

This software is also available under ImunifyAV commercial license,
see <https://www.imunify360.com/legal/eula>
�N)�
namedtuple)�partial)�List�Sequence)�Malware�UserType)�LicenseError)�MessageType)�MS_IGNORE_LIST_EDIT�check_permission)�AV�	AV_REPORT�FULL)�feature)�db)�run_in_executor)�CommonEndpoints�
RootEndpoints�bind)�run_in_executor_decorator)�ValidationError)�Scope�does_path_belong_to_user�get_path_owner�get_results_iterable_expression�is_cloudways�safe_fileops)�MalwareHitStatus�MalwareScanResourceType�MalwareScanType)�MalwareHistory�
MalwareHit�MalwareIgnorePath)�
split_args��get_crontab)�QueueSupervisorSync)�
MalwareAction)�	user_list)�MaliciousEndpointStatus)�FALSE_NEGATIVE�FALSE_POSITIVE�submit_malware�IgnoreParameters)�path�app_name�db_host�db_port�db_name)NNNNN)�defaultsc�v�eZdZejZdZedd��dd���Zedd��d���Z	dS)	�SubmitEndpointsu�Warning: This server’s security can be enhanced by enabling the MALWARE_SCANNING.sends_file_for_analysis option. This may minimize the number of undetected malware, making your system more resistant to new threats.

The command below can be used to enable the option:
imunify-antivirus config update '{"MALWARE_SCANNING": {"sends_file_for_analysis": true}}'
- or -
imunify360-agent config update '{"MALWARE_SCANNING": {"sends_file_for_analysis": true}}'
�submitzfalse-positiveNc���K�	t|t|����d{V��dS#t$r}t|���d}~wt$r#td�|�����wxYw)N)�reason�File {} doesn't exist.)r-r,r	r�FileNotFoundError�format)�self�filenamer9�scanner�es     �W/opt/imunify360/venv/lib/python3.11/site-packages/imav/malwarelib/rpc/endpoints/base.py�	submit_fpzSubmitEndpoints.submit_fpks�����	M� ��>�&�I�I�I�I�I�I�I�I�I�I�I�I���	%�	%�	%�!�!�$�$�$����� �	M�	M�	M�!�":�"A�"A�(�"K�"K�L�L�L�	M���s�#�
A,�<�0A,zfalse-negativec��$K�	t|t���d{V��tjst	j|j��SdS#t$r}t|���d}~wt$r#td�
|�����wxYw)Nr:)r-r+r�
SEND_FILES�warnings�warn�_SEND_FILES_DISABLED_BANNERr	rr;r<)r=r>r@s   rA�	submit_fnzSubmitEndpoints.submit_fnus�����	G� ��>�:�:�:�:�:�:�:�:�:��%�
G��}�T�%E�F�F�F�
G�
G���	%�	%�	%�!�!�$�$�$����� �	M�	M�	M�!�":�"A�"A�(�"K�"K�L�L�L�	M���s�A�
B�A�0B�N)
�__name__�
__module__�__qualname__rr
�SCOPErGrrBrH��rAr6r6Zs��������H�E�#��
�T�(�$�%�%�M�M�M�&�%�M�
�T�(�$�%�%�	G�	G�&�%�	G�	G�	GrOr6c����eZdZejZ�fd�Zeeee	g��e
ddd��edd�������Ze
eeee	g��e
dd��dd�������Zeeeee	g��e
ddd	��dd
�������Zeeee	g��e
ddd��dd�����Zdd
�Zeeee	g��e
ddd��edd�������Ze
ddd��	dd���Ze
ddd��	dd���Ze
ddd��edd�����Ze
ddd��d���Z�xZS)�MaliciousEndpointsc�t��t���|��t|���|_dS)N)�sink)�super�__init__�	ScanQueue�queue)r=rS�	__class__s  �rArUzMaliciousEndpoints.__init__�s1���
����������D�)�)�)��
�
�
rO�malware�	malicious�listNc�(�tjdd|i|��S�N�userrN)r"�malicious_list�r=r^�kwargss   rAr_z!MaliciousEndpoints.malicious_list�s ���(�=�=�d�=�f�=�=�=rO�readc
��K�d}tj�|��std���|r$t	jtj|||d���}nt	jt||��}	|��5}|�	|��|�
|��}	|	rdnd}
|	�dd���}d	||
||tj|�
����jd
�icddd��S#1swxYwYdS#tj$r�t"$r}t%d��|�d}~wwxYw)N�rbznotifications.fileNotFoundF)�respect_homedirTzutf-8�ignore)�errors�data)�chunk�eof�limit�offset�sizeznotifications.permissionError)�osr/�existsr;�	functoolsrr�safe_open_file�open�seekrb�decode�fstat�fileno�st_size�asyncio�CancelledError�	Exception�PermissionError)
�clsr/rlrkr^�_�mode�open_fun�frirj�textr@s
             rA�	read_filezMaliciousEndpoints.read_file�s��������w�~�~�d�#�#�	B�#�$@�A�A�A��		;� �(��+���� %����H�H�!�(��t�T�:�:�H�	J�����
�q����v�������u�
�
��$�.�e�e�$���|�|�G�H�|�=�=���!%�"�!&�"(� "������� 4� 4� <����

�
�
�
�
�
�
�
�
�
�
�
����
�
�
�
�
�
���%�	�	�	���	J�	J�	J�!�"A�B�B��I�����	J���s=�5
D�?A:D�9D�D
�
D�
D
�D�E�,D<�<Ezremove-from-listc��zK�tj||���}tj|��t|g��S)N�r^)r"�malicious_select�delete_instancesr*)�idsr^�hits_to_removes   rA�malicious_remove_from_listz-MaliciousEndpoints.malicious_remove_from_list�s>����$�4�S�t�D�D�D���#�N�3�3�3�&�~�r�:�:�:rOzmove-to-ignorec��\K�|�||���d{V��}t|��SrI)�_malicious_move_to_ignore�len)r=r�r^�ignoreds    rA�malicious_move_to_ignorez+MaliciousEndpoints.malicious_move_to_ignore�s;�����6�6�s�D�A�A�A�A�A�A�A�A���7�|�|�rOc	��"K�tt|��ttj��ttj||������d{V��}d�|D��}ttj��ttj|�����d{V��d�|D��}d�|D��}d�|D��}t|j
���|tj
j����d{V��t|j
���|tjj����d{V��z}t jr>|D];}	t%jt(|	j|	j|	j|	j|����d{V���<|S)Nr�c3�DK�|]}|jtjk�|V��dSrI)�statusr�FOUND)�.0�hs  rA�	<genexpr>z?MaliciousEndpoints._malicious_move_to_ignore.<locals>.<genexpr>�s;����
�
��q�x�+;�+A�A�A�A�A�A�A�A�
�
rOc�F�g|]}|jtjjk�|��SrN)�
resource_typer�FILE�value�r��hits  rA�
<listcomp>z@MaliciousEndpoints._malicious_move_to_ignore.<locals>.<listcomp>�s7��
�
�
��� �$;�$@�$F�F�F�
�F�F�FrOc�8�g|]}t|j�����S)�r/)r.�	orig_filer�s  rAr�z@MaliciousEndpoints._malicious_move_to_ignore.<locals>.<listcomp>�s3��
�
�
�58��#�-�0�0�0�
�
�
rOc	��g|]H}|jtjjk�t	|j|j|j|j|j	����ISrN)
r�r�DBr�r.r�r0r1r2r3r�s  rAr�z@MaliciousEndpoints._malicious_move_to_ignore.<locals>.<listcomp>�s_��

�

�

��� �$;�$>�$D�D�D�
��
���������
�
�E�D�DrO�r�)�typer9r/�
file_owner�	file_user�	initiator)rrrrx�get_event_looprr"r�r��IgnoreEndpoints�_sink�try_add_to_ignorerr�r�r�rrDr(�submit_for_analysisr,r�r��ownerr^)
r=r�r^�hits�malicious_found�	file_hits�
file_items�db_itemsr�r�s
          rAr�z,MaliciousEndpoints._malicious_move_to_ignore�sL�����,�d�3�3�3�$��"�$�$��J�/��4�@�@�@�
�
�
�
�
�
�
�
��
�
��
�
�
����"�$�$��J�/��A�A�
�
�	
�	
�	
�	
�	
�	
�	
�
�
��
�
�
�	�

�
�<E�
�
�
�
�

�

��

�

�

��(��
�3�3�E�E��1�6�<�F�
�
�
�
�
�
�
�
�"�$�*�-�-�?�?��1�4�:�@�
�
�
�
�
�
�
�
�
����		� �
�
��#�7�'��8���"�y�!�h�"�
������������rO�historyc�(�tjdd|i|��Sr])r!�get_historyr`s   rAr�zMaliciousEndpoints.get_history�s ���)�>�>�t�>�v�>�>�>rOr^c��RK�|r:tj|jj|h����d{V��\}}t	|��}	n�|r9tj|jj|����d{V��\}}t	|��}	nS|r*tj|jj|����d{V��\}	}n'tj|jj���d{V��\}	}tj|��}t
|pg��D]#}
tj||
j|
j���}�$|}||z}|	|||�fS)N)�match)�desc)	r)�fetch_user_listrW�get_scans_from_pathsr��sort�reversed�column_namer�)
r=rlrk�search�order_byr^r�r}�users�	max_count�order�start�ends
             rAr)zMaliciousEndpoints.user_lists������	�&�6��
�/��v����������H�A�u��E�
�
�I�I�
�	�&�6��
�/�v����������H�A�u��E�
�
�I�I�
�		�%.�%>��
�/�s�&�&�&� � � � � � ��I�u�u�
&/�%>��
�/�&�&� � � � � � ��I�u�
��u�%�%���h�n�"�-�-�	N�	N�E��N�5�%�*;�%�*�M�M�M�E�E����u�n���%��c�	�*�*�*rO�scanFc��K�|s|std���|r;|j����d��rtd���|r
tj}ntj}tj���d{V��}d�|D��}|r3|jj	d|tj|d�t|�����d{V��|r3|jj	d|tj
|d�t|�����d{V��|rMtjrCd�|D��}|jj	d|tj
|d�t|�����d{V��dSdSdS)Nz3Either --scan-file or --scan-db should be specified�
backgroundzBackground scan pendingc��g|]
}|d��S)�homerN�r�r^s  rAr�z0MaliciousEndpoints.user_scan.<locals>.<listcomp>8s��0�0�0�$��f��0�0�0rO)�pathsr��	scan_typec�8�g|]}t|d����Sr�r%r�s  rAr�z0MaliciousEndpoints.user_scan.<locals>.<listcomp>Hs$��I�I�I�4�[��f��6�6�I�I�IrOrN)rrWr��getr �
BACKGROUND�	ON_DEMANDr)�panel_users�putrr�r$r�r�CRONTABS_SCAN_ENABLED)	r=�	scan_file�scan_dbr��	scan_argsr�r�r��
crontab_pathss	         rA�	user_scanzMaliciousEndpoints.user_scan&s&�����	��	�!�E���
��	=�$�*�+�+�-�-�1�1�,�?�?�	=�!�";�<�<�<��	2�'�2�I�I�'�1�I��+�-�-�-�-�-�-�-�-��0�0�%�0�0�0���	� �$�*�.���5�8�#����Y�'�'�	��
�
�
�
�
�
�
��	� �$�*�.���5�:�#����Y�'�'�	��
�
�
�
�
�
�
��	�'�7�	�I�I�5�I�I�I�M� �$�*�.��#�5�:�#����Y�'�'�	��
�
�
�
�
�
�
�
�
�	�	�	�	rO�
suspiciousc�(�tjdd|i|��Sr])r"�suspicious_listr`s   rAr�z"MaliciousEndpoints.suspicious_listPs ���)�>�>�t�>�v�>�>�>rOc����K�d}d��ttj����fd����d{V��}|D]E}tj|jtjj���|�	��|dz
}�F|S)Nrc��tj���tj�|����SrI)r"�select�where�id�in_)r�s rA�
expressionz@MaliciousEndpoints.suspicious_move_to_ignore.<locals>.expressionYs/���$�&�&�,�,�Z�]�->�->�s�-C�-C�D�D�DrOc�>��tt������SrI)r[r)r�r�s��rA�<lambda>z>MaliciousEndpoints.suspicious_move_to_ignore.<locals>.<lambda>^s���D�8��S�I�I�J�J�rO)r/r��)
rrxr�r#�
get_or_creater�rr�r��delete_instance)r=r��totalr�r�r�s `   @rA�suspicious_move_to_ignorez,MaliciousEndpoints.suspicious_move_to_ignoreUs���������	E�	E�	E�%��"�$�$�J�J�J�J�J�
�
�
�
�
�
�
�
���	�	�C��+��]�5�:�@�
�
�
�
�
���!�!�!��Q�J�E�E��rOrI)NNNN)F)rJrKrLrr
rMrUrrrrrr_�classmethodr��staticmethodr�r�r�r�r)r�r�r��
__classcell__)rXs@rArQrQ�s���������H�E�*�*�*�*�*�
�W�R�$�	�"�#�#�	�T�)�[�&�)�)��>�>�>���*�)�$�#�>���W�R�$�	�"�#�#�	�T�)�V���"J�"J�"J���$�#��[�"J�H��W�R�$�	�"�#�#�	�T�)�[�"4�5�5�;�;�;�6�5�$�#��\�;�

�W�R�$�	�"�#�#�	�T�)�[�"2�3�3����4�3�$�#��5�5�5�5�n
�W�R�$�	�"�#�#�	�T�)�Y��'�'��?�?�?���(�'�$�#�?�
�T�)�V�V�$�$�HL�"+�"+�"+�%�$�"+�H
�T�)�V�V�$�$�-2�'�'�'�%�$�'�R
�T�)�\�6�*�*��?�?�?���+�*�?�
�T�)�\�#3�4�4���5�4�����rOrQ�returnc��t��rt|��}|ptj}n|pt|��x}}||fSrI)rrr�ROOT)r/r^r�s   rA�get_file_ownershipr�jsL���~�~�4��t�$�$���$�x�}����3�~�d�3�3�3����$�;�rOc
��eZdZeddd��edd�����Zeddd��dd���Zeddd��dd
���Zeddd��dd���Z	dd
e	e
dededeefd�Z
dd�ZdS)r�rYrfr[Nc�\�tt|��|�||d<tjdi|��Sr])rrr#�paths_count_and_listr`s   rA�ignore_listzIgnoreEndpoints.ignore_listxs;��	�,�d�3�3�3���!�F�6�N� �5�?�?��?�?�?rOz	delete-uic��BK�|�||d����d{V��S)NF)r�r^�skip_rescan)�
ignore_delete)r=r�r^s   rA�ignore_delete_uiz IgnoreEndpoints.ignore_delete_ui�sJ�����'�'����(�
�
�
�
�
�
�
�
�	
rO�deleteFc	��
��	K�tt���ttj���tj�|������}��t����	��	fd�|D��}d�|D��}tj
��5|D]I}t|j���\}}tj|j||�ptj|j����J	ddd��n#1swxYwY|rf|s3|j�t)j|������d{V��|j�t)j�����d{V��t/|��S)Nc�T��g|]$}t|j���s|j�k�"|��%SrN�rr/)r��ignore_pathr^�user_crontab_paths  ��rAr�z1IgnoreEndpoints.ignore_delete.<locals>.<listcomp>�sK�������+�K�,<�d�C�C���#�'8�8�8��9�8�8rOc�P�g|]#}|jtjjk�|j��$SrN)r�rr�r�r/)r�r�s  rAr�z1IgnoreEndpoints.ignore_delete.<locals>.<listcomp>�s:��
�
�
���(�,C�,H�,N�N�N�
��N�N�NrO)r/r�r�r�r�)�filelist)rrr[r#r�r�r�r�r&r�atomicr�r/r(�delete_from_ignore_syncrr�r�r��process_messager
�MalwareScanTask�MalwareIgnorePathUpdatedr�)
r=r�r^r��ignore_pathsr�r�r�r�r�s
  `      @rAr�zIgnoreEndpoints.ignore_delete�s4�������,�d�3�3�3�04��$�&�&�,�,�->�-A�-E�-E�c�-J�-J�K�K�1
�1
���� +�D� 1� 1�������#/����L�
�
�+�
�
�
���Y�[�[�	�	�+�

�

��(:��$�d�)�)�%�
�I��5�$�)�)�'�"�3�h�m�"-�";������	

�	�	�	�	�	�	�	�	�	�	�	����	�	�	�	��	��
��j�0�0��/��?�?�?�����������*�,�,��4�6�6���
�
�
�
�
�
�
��5�z�z�s�)A
D�D�
D�addc��vK�d�|D��}|�|||���d{V��}t|��S)Nc�,�g|]}t|����SrN)r.)r�r/s  rAr�z.IgnoreEndpoints.ignore_add.<locals>.<listcomp>�s!��:�:�:�D�!�$�'�'�:�:�:rO)r�r�)r=r�r�r^�items�addeds      rA�
ignore_addzIgnoreEndpoints.ignore_add�sN����:�:�E�:�:�:���,�,�U�M�4�H�H�H�H�H�H�H�H���5�z�z�rOr	r�r^r�c��N��	�
K�tt���g}d�|D��}��t����
��
fd�|D��}tj|����	�	fd�|D��}|D]�}t|j���\}}tj|j|||�ptj
|j|j|j
|j��	�	�d{V��}|jr|�|j����|r1|j�t'j�����d{V��|S)Nc�Z�g|](}tj�|j���&|��)SrN)rnr/�isabs)r��items  rAr�z5IgnoreEndpoints.try_add_to_ignore.<locals>.<listcomp>�s-��D�D�D�$�2�7�=�=���+C�+C�D��D�D�DrOc3�\�K�|]&}t|j���s|j�k�"|V��'dSrIr�)r��ir^r�s  ��rAr�z4IgnoreEndpoints.try_add_to_ignore.<locals>.<genexpr>�sU��������+�A�F�D�9�9���6�.�.�.��/�.�.�.�	�rOr�c3�.�K�|]}|j�v�|V��dSrIr�)r�r	�already_ignoreds  �rAr�z4IgnoreEndpoints.try_add_to_ignore.<locals>.<genexpr>�s/�����O�O�5�U�Z��-N�-N��-N�-N�-N�-N�O�OrO)	r/r�r�r�r�r0r1r2r3)rrr&r#�	path_listr�r/r(rfrr�r0r1r2r3�
successful�appendr�rr
r)r=r	r�r^r
rr�r��resultrr�s   `     @@rAr�z!IgnoreEndpoints.try_add_to_ignore�s��������	�,�d�3�3�3���D�D�%�D�D�D���� +�D� 1� 1�����������E�,�5�'�
�
�
��P�O�O�O�E�O�O�O���	(�	(�D�$6�t�y�$�$G�$G�!�J�	�(�/��Y�+�%�#��/�(�-���������
�
�
�
�
�
�
�
�
�F�� �
(����T�Y�'�'�'���	��*�,�,��4�6�6���
�
�
�
�
�
�
��rOc��K�tj�|��sJ�|�t||��sdSt	j|���d{V��S�NF)rnr/rrr#�is_path_ignored)r=�
check_pathr^s   rArzIgnoreEndpoints.is_path_ignored�s^�����w�}�}�Z�(�(�(�(�(���$<�Z��$N�$N���5�&�6�z�B�B�B�B�B�B�B�B�BrOrIr)rJrKrLrrr�r�r�rrr.�strrr�rrNrOrAr�r�vsG������	�T�)�X�v�&�&��@�@�@���'�&�@�
�T�)�X�{�+�+�
�
�
�,�+�
�
�T�)�X�x�(�(�-�-�-�)�(�-�^
�T�)�X�u�%�%����&�%���	-�-��(�)�-��-��	-�

�c��-�-�-�-�^C�C�C�C�C�CrOr�c�:�eZdZeddd��d���ZdS)�MalwareRebuildPatternsrY�rebuild�patternsc��lK�|j�tj�����d{V��iSrI)r�rr
r)r=s rA�rebuild_patternsz'MalwareRebuildPatterns.rebuild_patterns�sQ�����j�(�(��0�2�2�
�
�	
�	
�	
�	
�	
�	
�	
��	rON)rJrKrLrr"rNrOrArr�s<������	�T�)�Y�
�+�+���,�+���rOrc�J�eZdZedd��deefd���ZdS)�MalwareRescanEdnpointsrY�rescan�filesc��pK�|j�tj|������d{V��iS)N)r&)r�rr
�MalwareRescanFiles)r=r&s  rA�malware_rescan_filesz+MalwareRescanEdnpoints.malware_rescan_filessV�����j�(�(��*��7�7�7�
�
�	
�	
�	
�	
�	
�	
�	
��	rON)rJrKrLrrrr)rNrOrAr$r$�sJ������	�T�)�X�����S�	��������rOr$c�P�eZdZeddd��dedeefd���ZdS)�MalwareSendFilesrY�sendr&r9c��rK�|j�tj||������d{V��iS)N)r9r&)r�rr
r+)r=r9r&s   rA�malware_send_filesz#MalwareSendFiles.malware_send_files	sX�����j�(�(��(��e�D�D�D�
�
�	
�	
�	
�	
�	
�	
�	
��	rON)rJrKrLrrrr.rNrOrAr+r+sS������	�T�)�V�W�%�%��s��4��9����&�%���rOr+)U�__doc__rxrp�loggingrnrE�collectionsrr�typingrr� defence360agent.contracts.configrr�!defence360agent.contracts.licenser	�"defence360agent.contracts.messagesr
�%defence360agent.contracts.permissionsrr�,defence360agent.feature_management.constantsr
rr�)defence360agent.feature_management.lookupr�defence360agent.model.instancer�$defence360agent.model.simplificationr� defence360agent.rpc_tools.lookuprrr�defence360agent.rpc_tools.utilsr�"defence360agent.rpc_tools.validater�defence360agent.utilsrrrrrr�imav.malwarelib.configrrr �imav.malwarelib.modelr!r"r#�&imav.malwarelib.rpc.endpoints.ondemandr$�imav.malwarelib.scan.crontabr&�*imav.malwarelib.scan.queue_supervisor_syncr'rV�imav.malwarelib.subsys.malwarer(�imav.malwarelib.utilsr)�imav.malwarelib.utils.endpointsr*�imav.malwarelib.utils.submitr+r,r-�	getLoggerrJ�loggerr.r6rQ�tuplerr�r�rr$r+rNrOrA�<module>rKs�����*������������	�	�	�	�����"�"�"�"�"�"�������!�!�!�!�!�!�!�!�>�>�>�>�>�>�>�>�:�:�:�:�:�:�:�:�:�:�:�:���������M�L�L�L�L�L�L�L�L�L�=�=�=�=�=�=�-�-�-�-�-�-�@�@�@�@�@�@�����������
F�E�E�E�E�E�>�>�>�>�>�>���������������������������
����������
>�=�=�=�=�=�4�4�4�4�4�4�������9�8�8�8�8�8�+�+�+�+�+�+�C�C�C�C�C�C�����������
��	�8�	$�	$���:��9�9�9�
+�����%G�%G�%G�%G�%G�m�%G�%G�%G�Pe�e�e�e�e��e�e�e�P	�e�C��H�o�	�	�	�	�	���d�I�
���|C�|C�|C�|C�|C�o�|C�|C� ��|C�~�����]���������]���������}�����rO

Hacked By AnonymousFox1.0, Coded By AnonymousFox