HEX
Server: Microsoft-IIS/10.0
System: Windows NT ITPWINWEBSVR22 10.0 build 20348 (Windows Server 2022) AMD64
User: www.conferencesearch.co.uk (0)
PHP: 8.3.30
Disabled: NONE
Upload Files
File: D:/web/hyperflight/apps/inxpress/prev/2025-10-31/__pycache__/app.cpython-311.pyc
�

�i�G��.�ddlmZmZddlmZmZmZmZmZm	Z	m
Z
mZddlm
Z
mZddlmZddlmZddlmZddlmZmZdd	lmZdd
lZdd
lZddlmZee��Zhd�Zed
���e_e� d��d���Z!ej"d���Z#ej$dd��e_%ej&�'ddd���ej$dd��Z(ej$dd��Z)d?d�Z*d�Z+e� ddd g�!��d"���Z,e� d#��d$���Z-ej$d%d&��d'kr'de_.dej&d(<ej/ej0�)��ed*��Z1e� d+��d,���Z2ee��e� d��d-���Z3e� d.��d/���Z4e� d0��d1���Z5dd2lm
Z
mZddlmZd3�Z6e� d4��d5���Z7e� d6��d7e8fd8���Z9e� d9��d:���Z:ed;kre�;d<d=d�>��d
Sd
S)@�)�urlparse�urljoin)�Flask�session�redirect�url_for�request�abort�render_template�send_from_directory)�Decimal�InvalidOperation�)�get_db)�register_filters��country_name)�datetime�	timedelta��wrapsN)�Path>�/login�/health�/logout�)�hours�/c�:�ttd����S)N�shipments_parsed)rr���+D:\web\hyperflight\apps\inxpress\app\app.py�rootr$s���G�.�/�/�0�0�0r"c���tj}|�d��rdS|tvrdSt	jd��rdStjtd<ttd����S)Nz/static/�user�next�login)	r	�path�
startswith�PUBLIC_PATHSr�get�	full_pathrr)�ps r#�require_login_everywherer/sm����A��|�|�J�������L������{�6�������'�G�F�O��G�G�$�$�%�%�%r"�FLASK_SECRETz
replace-meT�Lax)�SESSION_COOKIE_SECURE�SESSION_COOKIE_HTTPONLY�SESSION_COOKIE_SAMESITE�APP_USER�admin�APP_PASS�	hyperbankr c�>�tj�d��ptjdd��}|st|��St
ttj|����}|j	r6|j	t
tj��j	krt|��Stj
pd�d��}|j�
|dz��s|j|krt|��S|jr|���n|S)Nr'z/apps/inxpressr)r	�argsr,r�poprrr�host_url�netloc�script_root�rstripr)r*�scheme�geturl)�
default_ep�nxt�test�prefixs    r#�
_safe_nextrF3s���
�,�
�
�6�
"�
"�
?�g�k�&�$�&?�&?�C��#��z�"�"�"��G�G�,�c�2�2�3�3�D��{�#�t�{�h�w�/?�&@�&@�&G�G�#��z�"�"�"��!�5�%5�
=�
=�c�
B�
B�F��9������-�-�#�$�)�v�2E�#��z�"�"�"� �K�0�4�;�;�=�=�=�S�0r"c�<��t����fd���}|S)Nc���tjd��tkr�|i|��Stjtd<tt
d����S)Nr&r'r()rr,�USERr	r-rr)r:�kwargs�fns  �r#�wrapzlogin_required.<locals>.wrapGsQ����;�v���$�&�	'��2�t�&�v�&�&�&�!�+�������(�(�)�)�)r"r)rKrLs` r#�login_requiredrMFs3���
�2�Y�Y�*�*�*�*��Y�*��Kr"r�GET�POST)�methodsc���tjdkr�tj�d��tkr^tj�d��t
kr6ttd<dt_tt����Stdd���Stj�d	��}|r
|td	<td��S)
NrO�ur.r&Tz
login.htmlzInvalid credentials)�errorr')r	�method�formr,rI�PASSr�	permanentrrFrr:)rCs r#r(r(Ps����~���J��<���C� � �$�&�	*�7�<�+;�+;�C�+@�+@�$�+F�	*�"�G�F�O� $�G���J�L�L�)�)�)��|�3H�I�I�I�I�
�,�
�
�6�
"�
"�C�
�������<�(�(�(r"rc�`�tj��ttd����S)Nr()r�clearrrr!r"r#�logoutrZ_s#���M�O�O�O��G�G�$�$�%�%�%r"�	APP_DEBUG�0�1�PROPAGATE_EXCEPTIONS)�levelzD:\data\inxpress_pdfsz/pdf/<path:fname>c�$�t|��j}|����d��st	d��t
|z}|���st	d��tt
|dd|d���S)zs
    Stream a PDF from D:\data\inxpress_pdfs by file name.
    Prevent directory traversal and 404 if missing.
    z.pdf�zapplication/pdfFr)�mimetype�
as_attachment�
download_name�max_age)r�name�lower�endswithr
�PDF_ROOT�existsr)�fname�	name_only�fpaths   r#�pdf_downloadrnps����U��� �I��?�?���%�%�f�-�-��
�c�
�
�
��y� �E��<�<�>�>��
�c�
�
�
���)�"�������r"c��dS)Nzinxpress app aliver!r!r"r#�homerp�s���r"rc�
�ddiS)N�status�okr!r!r"r#�healthrt�s
���d��r"z	/inxpressc�t�tj�d��}tj�d��}d}t�����5}|�|||||f��|���}ddd��n#1swxYwYtd|||���S)z�
    Mirrors your ASP page but rendered via Jinja.
    - Numeric rules: blank if zero, 2dp for totals
    - Styling: use your existing CSS (copy into app/static/css/site.css)
    �from�toae
        SELECT  InvoiceNo,
                Base, Fuel, Other, Net, VAT, Total,
                Charged, Cost, Calculated,
                InvoiceDate
        FROM    inxpress_invoices
        WHERE   (%s IS NULL OR InvoiceDate >= %s)
        AND     (%s IS NULL OR InvoiceDate <  %s)
        ORDER BY InvoiceDate DESC, InvoiceNo DESC
        LIMIT 500
    Nz
inxpress.html)�rows�	date_from�date_to)r	r:r,r�cursor�execute�fetchallr)ryrz�sql�currxs     r#�inxpressr��s����� � ��(�(�I��� � ��&�&�G�
�C�
�����	�	��c����C�)�Y���A�B�B�B��|�|�~�~���������������������?���T[�\�\�\�\s�!/B�B �#B )rr	c���|���5}|�d|f��d�|���D��cddd��S#1swxYwYdS)z-Return list of column names in display order.z�
          SELECT COLUMN_NAME
          FROM information_schema.COLUMNS
          WHERE TABLE_SCHEMA = DATABASE() AND TABLE_NAME = %s
          ORDER BY ORDINAL_POSITION
        c��g|]
}|d��S)�COLUMN_NAMEr!��.0�rs  r#�
<listcomp>z&_get_table_columns.<locals>.<listcomp>�s��9�9�9�Q��-� �9�9�9r"N)r{r|r})�conn�tablers   r#�_get_table_columnsr��s���	
�����:�#�����
�X�	�	�	�:�9�#�,�,�.�.�9�9�9�:�:�:�:�:�:�:�:�:�:�:�:����:�:�:�:�:�:s�5A�A�Az
/shipmentsc	�h�d}t��}tj�d��pd���}tj�d��pd���}tj�d��pd���}tj�d��pd������}tj�d��pd���}tj�d��pd���}d	tdzd
tdzfd�}||��}	||��}
tj�d��pd
���}tj�d��pd���}tj�d��pd������}
|
dvrdn*ttt|
��d��d��}|�dn<tttj�dd��pd��d��}|�dn|dz
|z}tj�d��dk}gg}}d}i}|���5}|�|��|�
��D] }t|d��||d<�!	ddd��n#1swxYwYt|�����}|r$d|�d�}|�d��||gdzz
}|r*|�d ��|�|��|r*|�d!��|�|��|r|�d"��|||gz
}|	r*|�d#��|�|	��|
rtt#j|
d$�����t)d�%��z���}|�d&��|�|��|ru|s|�d'��n]d(�d)gt/|��z��}|�d*|�d+|�d,|�d-���|�|d.z��|rd/d0�|��znd}d1|�d2|��}d3|�d4|�d5|�d6|����d7�	|�dnd8z}|���5}|�d9|�d:���d;�|�
��D��}|�d<|�d=���d>�|�
��D��} |�d?|�d@���dA�|�
��D��}!|�||��|���dB}"|�|�||��n|�||||gz��|�
��}#ddd��n#1swxYwYt5dC�|!D��dD��E��}$dF�}%dG�dHD��}&t7dI��|&dJ<|#D�]�}'|%|'�dK����|%|'�dL����z|%|'�dM����z|%|'�dN����z|%|'�dO����z|%|'�dP����z}(|(|'dJ<|&dQxx|%|'�dQ����z
cc<|&dRxx|%|'�dR����z
cc<|&dSxx|%|'�dS����z
cc<|&dTxx|%|'�dT����z
cc<|&dUxx|%|'�dU����z
cc<|&dJxx|(z
cc<���|�dnt|"|zdz
|zd��})|�|"n|}*tj�d��dk}t9	dcidW|#�dX|�d|�d|�d|�dY|�d|�dZ| �d|�d[|$�d\|	�d]|
�d|�d|*�d^|"�d_|)�d`|&�d|�da|�db|
��S)dN�inxpress_shipments_parsed�q��invoice�carrier�countryrvrw�s�returnc��|sdSdD]M}	tj||��������cS#t$rY�JwxYwdS)z?Return YYYY-MM-DD from UK (DD/MM/YYYY) or ISO input; else None.N��%Y-%m-%dz%d/%m/%Yz%d-%m-%Yz%d.%m.%Y�r�strptime�date�	isoformat�
ValueError�r��fmts  r#�to_iso_datez%shipments_parsed.<locals>.to_iso_date�sy���	��4�C�	�	�C�
��(��C�0�0�5�5�7�7�A�A�C�C�C�C�C���
�
�
���
�����ts�8A�
A�A�sort�shipment_id�dir�asc�pagesize�200>r\�all�-1�@B�
r�pager�duponlyr]a(
      SELECT ref, COUNT(*) AS cnt FROM (
          SELECT TRIM(LOWER(Reference))  AS ref FROM inxpress_shipments_parsed
           WHERE Reference  IS NOT NULL AND Reference  <> ''
        UNION ALL
          SELECT TRIM(LOWER(Reference2)) AS ref FROM inxpress_shipments_parsed
           WHERE Reference2 IS NOT NULL AND Reference2 <> ''
        UNION ALL
          SELECT TRIM(LOWER(Reference3)) AS ref FROM inxpress_shipments_parsed
           WHERE Reference3 IS NOT NULL AND Reference3 <> ''
      ) t
      GROUP BY ref
      HAVING cnt > 1
    �cnt�ref�%z�(invoice_number LIKE %s OR AirbillNumber LIKE %s OR Reference LIKE %s OR Reference2 LIKE %s OR Reference3 LIKE %s OR ReceiverName LIKE %s)�zinvoice_number = %szCarrier = %sz((DestCountry = %s OR OriginCountry = %s)zShipDate >= %sr���daysz
ShipDate < %sz1=0z, z%sz0(
                  TRIM(LOWER(Reference))  IN (z0)
               OR TRIM(LOWER(Reference2)) IN (z0)
               OR TRIM(LOWER(Reference3)) IN (z)
            )��WHERE � AND �SELECT COUNT(*) AS n FROM � a�
        SELECT
            shipment_id, invoice_number, Carrier, AirbillNumber, ShipDate,
            OriginCountry, DestCountry, Reference, Reference2, Reference3,
            ReceiverName, Pieces, WeightKg, Length, Width, Height, Zone, ServiceType,
            BaseCharge, FuelSurcharge, Handling, Insurance, AreaSurcharge,
            ProcessingFee, ResidentialFee, OtherCharges,
            NetAmount, VATAmount, TotalParsed, Total
        FROM �	
        �
        ORDER BY `�` z, shipment_id DESC
    � LIMIT %s OFFSET %sz$SELECT DISTINCT invoice_number FROM z6 WHERE invoice_number<>'' ORDER BY invoice_number DESCc��g|]
}|d��S)�invoice_numberr!r�s  r#r�z$shipments_parsed.<locals>.<listcomp>Js��@�@�@�A�A�&�'�@�@�@r"zSELECT DISTINCT Carrier FROM z# WHERE Carrier<>'' ORDER BY Carrierc��g|]
}|d��S)�Carrierr!r�s  r#r�z$shipments_parsed.<locals>.<listcomp>Ms��9�9�9�Q�A�i�L�9�9�9r"z\
          SELECT DISTINCT UPPER(COALESCE(DestCountry, OriginCountry)) AS cc
          FROM zD
          WHERE COALESCE(DestCountry, OriginCountry) <> ''
        c��g|]
}|d��S)�ccr!r�s  r#r�z$shipments_parsed.<locals>.<listcomp>Ts��2�2�2�a�!�D�'�2�2�2r"�nc�6�g|]}|t|��p|d���S))r�rfr)r��cs  r#r�z$shipments_parsed.<locals>.<listcomp>`s+��A�A�A�Q��<��?�?�/�a�	0�	0�A�A�Ar"c��|dS)Nrfr!��xs r#�<lambda>z"shipments_parsed.<locals>.<lambda>as
��a��i�r")�keyc�\�|�tt|����ntd��S�N�0.00�r
�strr�s r#�dzshipments_parsed.<locals>.de�"���J�W�S��V�V�_�_�_�7�6�?�?�Jr"c�.�i|]}|td����S�r��r
�r��ks  r#�
<dictcomp>z$shipments_parsed.<locals>.<dictcomp>fs ��g�g�g�1�A�w�v���g�g�gr")�
BaseCharge�
FuelSurcharge�	NetAmount�	VATAmount�Totalr��Other�Handling�	Insurance�
AreaSurcharge�
ProcessingFee�ResidentialFee�OtherChargesr�r�r�r�r��shipments_parsed.htmlrx�
duplicates�invoices�carriers�	countries�
date_from_iso�date_to_iso�total�	last_page�sums�	direction�pagesize_raw)r�)rr	r:r,�strip�upperr�rg�max�min�intr{r|r}�list�keys�appendrr�r�rr��join�len�extend�fetchone�sortedr
r)+r�r�r�r�r�r��
date_from_raw�date_to_rawr�r�r�r�r�r�r�r��offsetr��where�params�dup_sql�dup_mapr�row�dup_keys�like�next_day�ph�	where_sql�	count_sql�data_sqlr�r��ccodes�
total_rowsrxr�r�r�r��otherr��pagesize_effectives+                                           r#r r �s��'�E��8�8�D���!�!�#�&�&�,�"�3�3�5�5�A���!�!�)�,�,�2��9�9�;�;�G���!�!�)�,�,�2��9�9�;�;�G���!�!�)�,�,�2��9�9�;�;�A�A�C�C�G��\�%�%�f�-�-�3��:�:�<�<�M��\�%�%�d�+�+�3��:�:�<�<�K�	�s�T�z�	�c�D�j�	�	�	�	� �K�
�.�.�M��K��,�,�K���!�!�&�)�)�:�]�A�A�C�C�D���!�!�%�(�(�2�U�9�9�;�;�I��L�$�$�Z�0�0�9�E�@�@�B�B�H�H�J�J�L�#�'7�7�g�t�t�S��S��EV�EV�Xa�Ab�Ab�df�=g�=g�H��S�1�1�c�#�g�l�.>�.>�v�q�.I�.I�.N�Q�*O�*O�QR�&S�&S�D��
=�Q�Q����X�(=�F��|���	�*�*�c�1�G���6�E�
�G��G�	
�����2�#����G�����<�<�>�>�	2�	2�C�"%�c�%�j�/�/�G�C��J���	2�2�2�2�2�2�2�2�2�2�2�2����2�2�2�2��G�L�L�N�N�#�#�H�	���1�x�x�x��
���$�	
�	
�	
��d�V�A�X��6��D�
���*�+�+�+�V�]�]�7�-C�-C�-C��=�
���^�$�$�$�f�m�m�G�&<�&<�&<��_�
���?�@�@�@�&�W�V]�L^�B^�&��E�
���%�&�&�&��
�
�m�(D�(D�(D��?��%�k�:�>�>�C�C�E�E�	�WX�HY�HY�HY�Y�d�d�f�f��
���_�%�%�%�v�}�}�X�'>�'>�'>��
(��		(��L�L���������D�6�C��M�M�1�2�2�B��L�L��/1���/1���02����
�
�
�

�M�M�(�Q�,�'�'�'�49�A��G�L�L��/�/�/�/�r�I�A�U�@�@�Y�@�@�I�����
������%�?�?�,�,�����<�2�2�'<�>�H�&
������#����x�5�x�x�x�y�y�y�@�@������@�@�@�����^�E�^�^�^�_�_�_�9�9�#�,�,�.�.�9�9�9����������	
�	
�	
�
3�2�3�<�<�>�>�2�2�2�����I�v�&�&�&��\�\�^�^�C�(�
��	?��K�K��&�)�)�)�)��K�K��&�H�f�+=�"=�>�>�>��|�|�~�~��+������������������.�A�A�&�A�A�A������I�K�J�J�g�g�(f�g�g�g�D��F�O�O�D��M�
�	$�	$����!�%�%�
�#�#�$�$�q�q����{�);�);�'<�'<�<�q�q�����AW�AW�?X�?X�X���!�%�%��(�(�)�)�*�,-�A�a�e�e�4D�.E�.E�,F�,F�G�IJ��1�5�5�Q_�K`�K`�Ia�Ia�b����'�
��\����a�a����l� 3� 3�4�4�4�����_������1�5�5��#9�#9�!:�!:�:�����[����Q�Q�q�u�u�[�1�1�2�2�2�����[����a�a����k� 2� 2�3�3�3�����W�
�
�
�a�a����g���/�/�/�
�
�
��W�
�
�
�e�#�
�
�
�
��Z���3�
�X�0E��0I�h�/V�XY�+Z�+Z�I�'/�E���X���|���	�*�*�c�1�G�
�����
�T���7����	�
�!��
�W��
(0�x����
�#+�(�
����$-�9��$�m�� �K���T��/�.��7A�j��MV�I���T�����)2�	��AM���s&�+AM�M�
M�DZ.�.Z2�5Z2z/shipment/<int:shipment_id>r�c��d}t��}|���5}|�||f��|���}ddd��n#1swxYwY|st	d��td|���S)Nz�
        SELECT shipment_id, ShipmentDetails, SenderAddress, ReceiverAddress,
               PiecesWeightDimensionsZone, Charges, Total, source_pdf, invoice_number
        FROM inxpress_shipments
        WHERE shipment_id = %s
        LIMIT 1
    razpartials/shipment_detail.html)r�)rr{r|r�r
r)r�r~r�rrs     r#�shipment_detailr�s����C��8�8�D�	
������#����C�+��(�(�(��l�l�n�n����������������������
�c�
�
�
��:�c�B�B�B�Bs�,A�A!�$A!z	/invoicesc�>
�d}tj�d��pd���}tj�d��pd���}tj�d��pd���}d�}||��}||��}tj�d��pd���}tj�d	��pd
���}hd�}	||	vrd}|dvrd
}tj�d
��pd������}
|
dvrdn*tt
t|
��d��d��}|�dn<tttj�dd��pd��d��}|�dn|dz
|z}
gg}}|r.|�d��|�d|�d���|r*|�d��|�|��|rttj
|d�����td���z�
��}|�d��|�|��|rdd�|��znd}d|�d|��}d|�d |�d!|�d"|����d#�	|�dnd$z}t!��}|���5}|�||��|���d%}|�|�||��n|�||||
gz��|���}ddd��n#1swxYwYd&�}d'�d(D��}|D�]}|d)xx||�d)����z
cc<|d*xx||�d*����z
cc<|d+xx||�d+����z
cc<|d,xx||�d,����z
cc<|d-xx||�d-����z
cc<|d.xx||�d.����z
cc<��
|�dnt||zdz
|zd��}|�|n|}t+d/|||||||||||
|�0�
�
S)1N�inxpress_invoicesr�r�rvrwc��|sdSdD]L}tj||��������cS#t$rY�IwxYwdS)Nr�r�r�s  r#�to_isozinvoices.<locals>.to_iso�sh������C�	$�	$�C� �)�!�S�1�1�6�6�8�8�B�B�D�D�D�D�D���#�#�#�t�t�#�����ts�8A�
A�Ar��invoice_dater��desc>�
amount_due�
invoice_idr�airbills_countr��customer_number�vat_shipments_vat�vat_shipments_total�vat_shipments_amount�non_vat_shipments_total�non_vat_shipments_amount>r�rr�r�>r\r�r�r�r�rr�rzinvoice_number LIKE %sr�zinvoice_date >= %sr�r�zinvoice_date < %sr�r�r�r�a*
        SELECT invoice_id, invoice_number, invoice_date, customer_number,
               airbills_count, amount_due,
               vat_shipments_amount, vat_shipments_vat, vat_shipments_total,
               non_vat_shipments_amount, non_vat_shipments_total,
               pdf_file
        FROM r�r�r�z, invoice_id DESC
    r�r�c�\�|�tt|����ntd��Sr�r�r�s r#r�zinvoices.<locals>.d�r�r"c�.�i|]}|td����Sr�r�r�s  r#r�zinvoices.<locals>.<dictcomp>�s,�����1�A�w�v�����r")rrrrrrrrrrrrz
invoices.html)rxr�r�r�r�r�r�r�r�r�r�r�)r	r:r,r�rgr�r�r�r�rr�r�rr�r�r�rr{r|r�r}r)r�r�r�r�rr�r�r�r��
allowed_sortsr�r�r�r�r�r��ndrrrr�rr
rxr�r�r�r�rs                             r#r�r��s���E�
��	�	�#�	�	�	$�"�+�+�-�-�A��\�%�%�f�-�-�3��:�:�<�<�M��\�%�%�d�+�+�3��:�:�<�<�K�����F�=�)�)�M��F�;�'�'�K���!�!�&�)�)�;�^�B�B�D�D�D���!�!�%�(�(�2�F�9�9�;�;�I����M��=� �7��$���&�:�F�	��L�$�$�Z�0�0�9�E�@�@�B�B�H�H�J�J�L�#�'7�7�g�t�t�S��S��EV�EV�Xa�Ab�Ab�df�=g�=g�H��S�1�1�c�#�g�l�.>�.>�v�q�.I�.I�.N�Q�*O�*O�QR�&S�&S�D��
=�Q�Q����X�(=�F���6�E�� �
���-�.�.�.��
�
�h�!�h�h�h�����I�
���)�*�*�*�F�M�M�-�,H�,H�,H��=����Z�8�8�=�=�?�?�)�QR�BS�BS�BS�S�
^�
^�
`�
`��
���(�)�)�)�6�=�=��+<�+<�+<�49�A��G�L�L��/�/�/�/�r�I�@�U�@�@�Y�@�@�I�	��
	�	�
�	�	��	�	�%�?�?�,�,�	�	�	��<�2�2�'<�	>�H��8�8�D�	
������#����I�v�&�&�&�S�\�\�^�^�C�5H�
��	?��K�K��&�)�)�)�)��K�K��&�H�f�+=�"=�>�>�>��|�|�~�~��
������������������K�J�J���)����D��O�O���\����1�1�Q�U�U�<�-@�-@�+A�+A�A�����
#�$�$�$�1�1�Q�U�U�3I�-J�-J�+K�+K�K�$�$�$��
 �!�!�!�1�1�Q�U�U�3F�-G�-G�+H�+H�H�!�!�!��
"�#�#�#�1�1�Q�U�U�3H�-I�-I�+J�+J�J�#�#�#��
'�(�(�(�1�1�Q�U�U�3M�-N�-N�+O�+O�O�(�(�(��
&�'�'�'�1�1�Q�U�U�3L�-M�-M�+N�+N�N�'�'�'�'��Z���3�
�X�0E��0I�h�/V�XY�+Z�+Z�I�'/�E���X����
�Q�#��
�.�j�I�
�Y�\�����s�2A9N7�7N;�>N;�__main__z	127.0.0.1i�)�host�port�debug)r )<�urllib.parserr�flaskrrrrr	r
rr�decimalr
r�dbr�filtersrrrr�	functoolsr�os�logging�pathlibr�__name__�appr+�permanent_session_lifetime�router$�before_requestr/�getenv�
secret_key�config�updaterIrVrFrMr(rZr%�basicConfig�DEBUGrirnrprtr�r�r r�rr��runr!r"r#�<module>r;s_��*�*�*�*�*�*�*�*�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�i�-�-�-�-�-�-�-�-�������%�%�%�%�%�%�!�!�!�!�!�!�(�(�(�(�(�(�(�(����������������������e�H�o�o��0�/�/��!*���!4�!4�!4������3���1�1���1���
&�
&���
&����>�<�8�8����
���� �!������r�y��W�%�%���r�y��[�)�)��1�1�1�1�&������8�e�F�^��,�,�)�)�-�,�)����9���&�&���&�

�2�9�[�#���#�%�-��C�I�)-�C�J�%�&��G��g�m�,�,�,�,�
�4�(�)�)���������� ���4���������3��� � ��� ����9�����������;���]�]���]�2+�*�*�*�*�*�*�*�������	:�	:�	:����<���G�G���G�T���(�)�)�C��C�C�C�*�)�C�"���;���`�`���`�H�z��5��G�G��4�t�G�4�4�4�4�4�5�5r"