§
    t�’j.R  ã                  ób   — d dl mZ 	 d dlZd dlmZ  ej        d¦  «        Z G d„ d¦  «        ZdS )é    )ÚannotationsN)ÚAnyzdscons.takeoff.audit_enginec                  ó0   — e Zd ZdZe	 	 ddd„¦   «         ZdS )ÚBoqAuditEnginezDAutomated Quality Assurance & Compliance Audit for Construction BoQ.Úcivil_buildingõ   Há»“ sÆ¡ bÃ³c tÃ¡ch báº£n váº½Úitemsúlist[dict[str, Any]]Údrawing_typeÚstrÚtakeoff_titleÚreturnúdict[str, Any]c                óþ  ‡#— g }g }d}d}d}d}	d}
d}d}d}t          |¦  «        D �]ë\  }}t          |                     d¦  «        pd¦  «                             ¦   «         Š#t          |                     d¦  «        pd¦  «                             ¦   «         }t	          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «                             ¦   «         }t	          |                     d¦  «        p|                     d	¦  «        pd¦  «        }|d
k    rM|                     dd|dz   |                     d¦  «        dd|                     d¦  «        › d|› d�ddœ¦  «         |d
k    rJ|                     dd|dz   |                     d¦  «        dd|                     d¦  «        › d�ddœ¦  «         d‰#v pd‰#v od‰#vod‰#vod‰#vod‰#vod‰#v}|rU|d vr7|                     dd!|dz   |                     d¦  «        d"d#|› d$�d%dœ¦  «         |d&|v s
d'|v s|d(k    r|d)z  n|z  }�Œd*‰#v sd+‰#v rpt          ˆ#fd,„d-D ¦   «         ¦  «        sUd.‰#v sd/‰#v rd0}|d1vr7|                     dd2|dz   |                     d¦  «        d3d4|› d5�d6dœ¦  «         ||d7|v rd8nd9z  z  }�Œ“d:‰#v sd;‰#v r||d<|v rd8nd9z  z  }�Œ«d=‰#v sd>‰#v r|	|z  }	�Œºd?‰#v sd@‰#v r|
|z  }
�ŒÉdA‰#v sd‰#v sdB‰#v rd0}�ŒÙdC‰#v sdD‰#v sdE‰#v sdF‰#v rd0}�Œí|dGk    ro|dk    ri|                     ddHdIdJ|dK›dL�dMdNœ¦  «         |                     dOdPdQdRdS|dK›dT�dUt          |dVz  dW¦  «        dXt          |dVz  dXz  d
¦  «        dYœ	¦  «         |dZk    ri|sg|                     dd[d\d]d^dNœ¦  «         |                     d_d`dadbdc|ddz  dK›de�dft          |ddz  dW¦  «        dgt          |ddz  dgz  d
¦  «        dYœ	¦  «         |dGk    rb|dk    r\||z  }|dhk     r&|                     ddidj|dk›dl�dm|dk›dn�dodNœ¦  «         n+|dpk    r%|                     dqdrds|dk›dl�dm|dk›dt�dudNœ¦  «         |	dvk    rq|
dk    rk|                     ddwdxdy|	dK›dz�d{dNœ¦  «         |                     d|d}d~d|	d€z  dK›d��dft          |	d€z  dW¦  «        d‚t          |	d€z  d‚z  d
¦  «        dYœ	¦  «         dƒ|v sd„|v sd…|v r<|s:|                     dqd†d‡dˆd‰dNœ¦  «         |                     dŠd‹dŒd�dŽd�d9d�d�dYœ	¦  «         d}d}d}d}t          |¦  «        D �]	\  }}t          |                     d¦  «        pd¦  «                             ¦   «         Š#t          |                     d¦  «        pd¦  «                             ¦   «         }t	          |                     d¦  «        p|                     d	¦  «        pd¦  «        }d*‰#v sd‘‰#v r6d.‰#v sd/‰#v r|}n+t          ˆ#fd’„d“D ¦   «         ¦  «        rt          ||¦  «        }d”‰#v sd•‰#v rd–|v r|d8z  n|}d—‰#v r|}n
d˜‰#v sd™‰#v r|}d:‰#v sd;‰#v rud<|v r|d8z  n|}d
|cxk     rdšk     r]n nZ|                     dd›|dz   |                     d¦  «        dœ|d�›dž�d|                     d¦  «        › dŸ|d�›d |› d¡|d�›d¢�	d£dœ¦  «         d¤‰#v sd¥‰#v sd¦‰#v rsd§‰#v sd¨‰#v sd©‰#v rgd7|v r|d8z  n|}|dªk    rV|                     dd«|dz   |                     d¦  «        d¬|d�›d­�d|                     d¦  «        › d®|d�›d |› d¯�d°dœ¦  «         �Œ|d
k    r0|d
k    r*||k    r$|                     dd±d²d³|d�›d´|d�›dµ�d¶dNœ¦  «         |d
k    r2||k    r,|                     dd·d¸|d�›d¹|d�›dº�d»d¼|dVz  d�›d½�dNœ¦  «         t          d¾„ |D ¦   «         ¦  «        }t          d¿„ |D ¦   «         ¦  «        }t          dÀ„ |D ¦   «         ¦  «        }|dÁz  |dÂz  z   |dWz  z   } t          dÃt          dÄdÄ| z
  ¦  «        ¦  «        }!|!dÅk    rdÆn|!dÇk    rdÈn	|!dÉk    rdÊndË}"dÌ||!|"t          |¦  «        t          |¦  «        |||t          |dW¦  «        t          |dW¦  «        t          |dW¦  «        t          |d)z  dÍ¦  «        |d
k    rt          ||z  d¦  «        nd|d
k    rt          ||z  dW¦  «        ndt          |	dW¦  «        t          |
dW¦  «        dÎœ||dÏœS )ÐzCPerform comprehensive structural and regulatory audit on BoQ items.g        FÚ	item_nameÚ ÚcategoryÚquantityÚunitÚunit_price_vndÚ
unit_pricer   Úcriticalz	AUDIT-001é   u.   Khá»‘i lÆ°á»£ng cÃ´ng tÃ¡c báº±ng 0 hoáº·c Ã¢mu   CÃ´ng tÃ¡c 'u   ' cÃ³ khá»‘i lÆ°á»£ng lÃ  u0   . Cáº§n kiá»ƒm tra láº¡i hÃ¬nh há»�c báº£n váº½.u<   Ä�iá»�n khá»‘i lÆ°á»£ng giáº£i tÃ­ch hÃ¬nh há»�c há»£p lá»‡.)ÚseverityÚcodeÚ
item_orderr   ÚtitleÚdescriptionÚ
suggestionÚwarningz	AUDIT-002u2   Ä�Æ¡n giÃ¡ cÃ´ng tÃ¡c chÆ°a Ä‘Æ°á»£c thiáº¿t láº­pu   ' cÃ³ Ä‘Æ¡n giÃ¡ = 0 VNÄ�.u@   Tá»± Ä‘á»™ng tra cá»©u Ä‘Æ¡n giÃ¡ Sá»Ÿ XÃ¢y Dá»±ng Háº£i PhÃ²ng.u   cá»‘t thÃ©pu   thÃ©pu   cá»«u   vÃ¡nu   dÃ¢yu   buá»™cu   á»‘ng)Úkgõ   táº¥nÚtanÚtÚmÚmdz	AUDIT-003u'   Sai lá»‡ch Ä�Æ¡n vá»‹ tÃ­nh Cá»‘t thÃ©pu+   CÃ´ng tÃ¡c cá»‘t thÃ©p Ä‘ang cÃ³ Ä�VT lÃ  'u/   ', báº¯t buá»™c pháº£i lÃ  'kg' hoáº·c 'táº¥n'.u6   Quy Ä‘á»•i vá»� Ä�VT 'táº¥n' hoáº·c 'kg' chuáº©n TCVN.r"   r#   r$   g     @�@u	   bÃª tÃ´ngÚbtctc              3  ó    •K  — | ]}|‰v V — Œ	d S ©N© )Ú.0ÚkÚnames     €úFC:\Projects\DSCons\app\modules\takeoff\application\boq_audit_engine.pyú	<genexpr>z/BoqAuditEngine.audit_takeoff.<locals>.<genexpr>d   sC   øè è € ð Eð Eàð �T�	ðEð Eð Eð Eð Eð Eó    )u   láº¯pu   láº¯p Ä‘áº·tu   cáº¥u kiá»‡nu   Ä‘oáº¡n á»‘ngu   bá»‘cu   váº­n chuyá»ƒnu   lÃ³tÚm100T)Úm3Ú100m3z	AUDIT-004u%   Sai lá»‡ch Ä�Æ¡n vá»‹ tÃ­nh BÃª tÃ´ngu)   CÃ´ng tÃ¡c bÃª tÃ´ng Ä‘ang cÃ³ Ä�VT lÃ  'u    ', báº¯t buá»™c pháº£i lÃ  'm3'.u   Chuyá»ƒn vá»� Ä�VT 'm3'.r3   g      Y@g      ð?u   vÃ¡n khuÃ´nz	van khuonÚ100m2u   Ä‘Ã ou
   náº¡o vÃ©tu   Ä‘áº¯pu   hoÃ n tráº£u   cá»�cÚlarsenu   bÆ¡mu   rÃ£nh tiÃªuu	   Ä‘Ãª quaiu
   háº¡ má»±cg      @z	AUDIT-010u5   Thiáº¿u toÃ n bá»™ cÃ´ng tÃ¡c VÃ¡n khuÃ´n káº¿t cáº¥uu!   Tá»•ng thá»ƒ tÃ­ch bÃª tÃ´ng lÃ  z.2fu6    m3 nhÆ°ng há»“ sÆ¡ chÆ°a cÃ³ vÃ¡n khuÃ´n tiáº¿p xÃºc.uR   Tá»± Ä‘á»™ng bá»• sung cÃ´ng tÃ¡c 'VÃ¡n khuÃ´n Ä‘á»‹nh hÃ¬nh thi cÃ´ng bÃª tÃ´ng'.)r   r   r   r   r   zVK-SUPPLEMENTzAF.81110uX   VÃ¡n khuÃ´n Ä‘á»‹nh hÃ¬nh thÃ©p thi cÃ´ng káº¿t cáº¥u bÃª tÃ´ng (Tá»± Ä‘á»™ng bá»• sung)Úformworku3   TÃ­nh theo Ä‘á»‹nh má»©c diá»‡n tÃ­ch tiáº¿p xÃºc (z m3 * 0.85 m2/m3)Úm2g333333ë?é   ih6 )	Úwbs_codeÚ	norm_coder   r   Údimension_formular   r   r   Útotal_amount_vndg      $@z	AUDIT-011u=   ChÆ°a cÃ³ cÃ´ng tÃ¡c BÃª tÃ´ng lÃ³t mÃ³ng / Ä‘Ã¡y káº¿t cáº¥uum   Theo TCVN vÃ  Ä�á»‹nh má»©c 2026, Ä‘Ã¡y mÃ³ng/cá»‘ng pháº£i cÃ³ lá»›p bÃª tÃ´ng lÃ³t M100 Ä‘Ã¡ 4x6 dÃ y 10cm.uH   Bá»• sung cÃ´ng tÃ¡c BÃª tÃ´ng lÃ³t Ä‘Ã¡y mÃ³ng Ä‘Ã¡ 4x6 M100 dÃ y 10cm.zLOT-SUPPLEMENTzAF.11110uE   BÃª tÃ´ng lÃ³t mÃ³ng Ä‘Ã¡ 4x6 M100 dÃ y 10cm (Tá»± Ä‘á»™ng bá»• sung)Úconcreteu   Ä�Ã¡y mÃ³ng dÃ y 10cm (g¸…ëQ¸¾?z m3)r2   iPø g      N@z	AUDIT-012u2   Tá»· lá»‡ thÃ©p/bÃª tÃ´ng tháº¥p báº¥t thÆ°á»�ng (z.1fz kg/m3)u   HÃ m lÆ°á»£ng thÃ©p Ä‘áº¡t uQ    kg/m3 bÃª tÃ´ng (má»©c tiÃªu chuáº©n káº¿t cáº¥u thÆ°á»�ng tá»« 80 - 160 kg/m3).u`   Kiá»ƒm tra láº¡i báº£ng thá»‘ng kÃª cá»‘t thÃ©p hoáº·c bá»• sung thÃ©p dáº§m/sÃ n/thÃ nh cá»‘ng.g     @o@Úinfoz	AUDIT-013u   HÃ m lÆ°á»£ng thÃ©p cao (u\    kg/m3 bÃª tÃ´ng (thÆ°á»�ng xuáº¥t hiá»‡n á»Ÿ Ä‘Ã i cá»�c chá»‹u táº£i trá»�ng cá»±c lá»›n).u-   XÃ¡c nháº­n Ä‘Ãºng thiáº¿t káº¿ ká»¹ thuáº­t.g      4@z	AUDIT-014u<   ChÆ°a cÃ³ cÃ´ng tÃ¡c Ä�áº¯p Ä‘áº¥t hoÃ n tráº£ sau thi cÃ´ngu!   Khá»‘i lÆ°á»£ng Ä‘Ã o Ä‘áº¥t lÃ  uB    m3 nhÆ°ng chÆ°a cÃ³ háº¡ng má»¥c Ä‘áº¯p Ä‘áº¥t hoÃ n tráº£ taluy.u\   Bá»• sung cÃ´ng tÃ¡c Ä�áº¯p Ä‘áº¥t Ä‘áº§m cháº·t K=0.90 hoÃ n tráº£ bá»� kÃªnh / há»‘ mÃ³ng.zDAP-SUPPLEMENTzAL.11110u[   Ä�áº¯p Ä‘áº¥t hoÃ n tráº£ há»‘ mÃ³ng/bá»� kÃ¨ Ä‘áº§m cháº·t K=0.90 (Tá»± Ä‘á»™ng bá»• sung)Ú	earthworkgffffffæ?u'    m3 (~70% thá»ƒ tÃ­ch Ä‘Ã o há»‘ mÃ³ng)iÈ¯  ÚculvertÚ	revetmentÚ	hydraulicz	AUDIT-015uI   ChÆ°a dá»± trÃ¹ biá»‡n phÃ¡p dáº«n dÃ²ng & bÆ¡m háº¡ má»±c nÆ°á»›c ngáº§mu•   CÃ´ng trÃ¬nh thá»§y lá»£i / kÃ¨ kÃªnh mÆ°Æ¡ng cáº§n biá»‡n phÃ¡p Ä‘Ãª quai rÃ£nh tiÃªu vÃ  mÃ¡y bÆ¡m háº¡ nÆ°á»›c ngáº§m phá»¥c vá»¥ Ä‘á»• bÃª tÃ´ng.uB   Bá»• sung gÃ³i chi phÃ­ Ä‘Ãª quai vÃ  mÃ¡y bÆ¡m nÆ°á»›c thi cÃ´ng.zBOM-SUPPLEMENTzTT.BOM01ua   Ä�Ãª quai, rÃ£nh tiÃªu thoÃ¡t nÆ°á»›c vÃ  bÆ¡m háº¡ má»±c nÆ°á»›c ngáº§m (Tá»± Ä‘á»™ng bá»• sung)Úsafety_methodu3   1 gÃ³i biá»‡n phÃ¡p thi cÃ´ng khÃ´ rÃ¡o Ä‘Ã¡y mÃ³ngu   gÃ³ii@x}Úbtc              3  ó    •K  — | ]}|‰v V — Œ	d S r)   r*   )r+   r%   r-   s     €r.   r/   z/BoqAuditEngine.audit_takeoff.<locals>.<genexpr>  s;   øè è € ð ð àð ˜�Iðð ð ð ð ð r0   )Úm200Úm250Úm300u   mÃ³ngu   tÆ°á»�ngu   dáº§mu   sÃ nu   báº£n máº·tu   cá»« larsenu   cá»�c vÃ¡n thÃ©pÚ100mu   nhá»•u   Ä‘Ã³ngu   Ã©piPÃ  zAUDIT-PRC-02u$   Ä�Æ¡n giÃ¡ VÃ¡n khuÃ´n quÃ¡ tháº¥p (z,.0fu    Ä‘/m2)u   ' cÃ³ Ä‘Æ¡n giÃ¡ u    Ä‘/z (~u¤    Ä‘/m2), tháº¥p hÆ¡n nhiá»�u so vá»›i Ä‘á»‹nh má»©c thá»±c táº¿ (135.000 - 185.000 Ä‘/m2). CÃ³ thá»ƒ bá»‹ thiáº¿u sá»‘ 0 hoáº·c nháº§m láº«n Ä‘Æ¡n vá»‹ tÃ­nh 100m2.us   Ä�iá»�u chá»‰nh Ä‘Æ¡n giÃ¡ vÃ¡n khuÃ´n vá»� dáº£i 14.500.000 - 18.500.000 VNÄ� / 100m2 (145.000 - 185.000 VNÄ�/m2).u   bá»‘c xáº¿pu
   bá»‘c dá»¡u   bá»‘c xuá»‘ngu   cÃ¡tu   Ä‘Ã¡u   sá»�ii¸ˆ  zAUDIT-PRC-03u=   Chi phÃ­ Bá»‘c xáº¿p váº­t liá»‡u rá»�i cao báº¥t thÆ°á»�ng (u    Ä‘/m3)u   ' cÃ³ Ä‘Æ¡n giÃ¡ bá»‘c xáº¿p uL   . Bá»‘c xáº¿p cÆ¡ giá»›i báº±ng xÃºc láº­t chá»‰ tá»« 15.000 - 25.000 Ä‘/m3.uU   Ä�iá»�u chá»‰nh Ä‘Æ¡n giÃ¡ bá»‘c xáº¿p cÆ¡ giá»›i vá»� má»©c 18.000 - 25.000 VNÄ�/m3.zAUDIT-PRC-01u?   Báº¥t há»£p lÃ½ phÃ¢n cáº¥p Ä‘Æ¡n giÃ¡ BÃª tÃ´ng (M250 <= M100)u   BÃª tÃ´ng káº¿t cáº¥u (uL    Ä‘/m3) Ä‘ang cÃ³ Ä‘Æ¡n giÃ¡ tháº¥p hÆ¡n hoáº·c báº±ng BÃª tÃ´ng lÃ³t M100 (u€    Ä‘/m3). BÃª tÃ´ng M250 cÃ³ cáº¥p phá»‘i xi mÄƒng cao hÆ¡n vÃ  dÃ¹ng Ä‘Ã¡ 1x2, báº¯t buá»™c pháº£i cÃ³ Ä‘Æ¡n giÃ¡ cao hÆ¡n M100.u‚   Ã�p dá»¥ng Ä‘á»‹nh má»©c: BÃª tÃ´ng lÃ³t M100 ~ 850.000 - 950.000 Ä‘/m3; BÃª tÃ´ng káº¿t cáº¥u M250 ~ 1.450.000 - 1.550.000 Ä‘/m3.zAUDIT-PRC-04u   Ä�Æ¡n giÃ¡ Nhá»• cá»« Larsen (u    Ä‘/m) cao hÆ¡n Ä�Ã³ng cá»« (u    Ä‘/m)u”   Trong thi cÃ´ng bÃºa rung thÃ´ng thÆ°á»�ng, cÃ´ng tÃ¡c nhá»• cá»« nhanh hÆ¡n vÃ  chi phÃ­ Ä‘á»‹nh má»©c chá»‰ báº±ng 60% - 85% chi phÃ­ Ä‘Ã³ng cá»«.uO   Ä�iá»�u chá»‰nh Ä‘Æ¡n giÃ¡ nhá»• cá»« vá»� khoáº£ng 30.000 - 40.000 VNÄ�/m (<= u	    VNÄ�/m).c              3  ó2   K  — | ]}|d          dk    ¯dV — ŒdS )r   r   r   Nr*   ©r+   Úfs     r.   r/   z/BoqAuditEngine.audit_takeoff.<locals>.<genexpr>v  s0   è è € ÐLÐL˜q°°*´ÀÒ0KÐ0K˜Ð0KÐ0KÐ0KÐ0KÐLÐLr0   c              3  ó2   K  — | ]}|d          dk    ¯dV — ŒdS )r   r    r   Nr*   rK   s     r.   r/   z/BoqAuditEngine.audit_takeoff.<locals>.<genexpr>w  s0   è è € ÐKÐK˜q°°*´ÀÒ0JÐ0J˜Ð0JÐ0JÐ0JÐ0JÐKÐKr0   c              3  ó2   K  — | ]}|d          dk    ¯dV — ŒdS )r   r>   r   Nr*   rK   s     r.   r/   z/BoqAuditEngine.audit_takeoff.<locals>.<genexpr>x  s0   è è € ÐHÐH˜q°°*´ÀÒ0GÐ0G˜Ð0GÐ0GÐ0GÐ0GÐHÐHr0   é   é   é   éd   é_   u   XUáº¤T Sáº®C (A+)éU   u   Ä�áº T CHUáº¨N (A)éF   u   Cáº¦N HIá»†U CHá»ˆNH (B)u   Cáº¢NH BÃ�O Rá»¦I RO (C)Úsuccessé   )Útotal_concrete_m3Útotal_formwork_m2Útotal_rebar_kgÚtotal_rebar_tonsÚrebar_ratio_kg_per_m3Úformwork_ratio_m2_per_m3Útotal_excavation_m3Útotal_backfill_m3)Ústatusr   Úquality_scoreÚgradeÚtotal_items_auditedÚfindings_countÚcritical_countÚwarning_countÚ
info_countÚmetricsÚfindingsÚrecommended_supplements)Ú	enumerater   ÚgetÚlowerÚfloatÚappendÚanyÚroundÚmaxÚsumÚminÚlen)$Úclsr	   r   r   ri   Úhealed_recommendationsrX   rY   rZ   r^   r_   Úhas_piling_or_sheetÚhas_drainage_pumpingÚhas_lean_concreteÚidxÚitmÚcatÚqtyr   ÚpriceÚis_rebarÚrebar_ratioÚlean_concrete_priceÚmax_structural_concrete_priceÚlarsen_drive_price_per_mÚlarsen_extract_price_per_mÚnorm_price_per_mÚeffective_m2_priceÚeffective_m3_priceÚ
crit_countÚ
warn_countrg   Úpenaltyra   rb   r-   s$                                      @r.   Úaudit_takeoffzBoqAuditEngine.audit_takeoff   s¡  ø€ ð *,ˆØ79ÐàÐØÐØˆØ!ÐØÐà#ÐØ$ÐØ!Ðå! %Ñ(Ô(ð d	,ñ d	,‰HˆC�Ý�s—w’w˜{Ñ+Ô+Ð1¨rÑ2Ô2×8Ò8Ñ:Ô:ˆDÝ�c—g’g˜jÑ)Ô)Ð/¨RÑ0Ô0×6Ò6Ñ8Ô8ˆCÝ˜Ÿš 
Ñ+Ô+Ð2¨sÑ3Ô3ˆCÝ�s—w’w˜v‘”Ð,¨"Ñ-Ô-×3Ò3Ñ5Ô5ˆDÝ˜#Ÿ'š'Ð"2Ñ3Ô3ÐS°s·w²w¸|Ñ7LÔ7LÐSÐPSÑTÔTˆEð �aŠxˆxØ—’à$.Ø +Ø&)¨A¡gØ%(§W¢W¨[Ñ%9Ô%9Ø!Qð (\°c·g²g¸kÑ6JÔ6Jð  (\ð  (\Ðfið  (\ð  (\ð  (\Ø&dðð ñ
ô 
ð 
ð ˜ŠzˆzØ—’à$-Ø +Ø&)¨A¡gØ%(§W¢W¨[Ñ%9Ô%9Ø!UØ'f°c·g²g¸kÑ6JÔ6JÐ'fÐ'fÐ'fØ&hðð ñ
ô 
ð 
ð %¨Ð,ð Ø˜4�ð (Ø $Ð&ð(à $Ð&ð(ð  $Ð&ð(ð  DÐ(ð	(ð
  4Ð'ð ð ð 9,ØÐEÐEÐEØ—O’Oà(2Ø$/Ø*-°©'Ø),¯ª°Ñ)=Ô)=Ø%Nð ,OÐY]ð  ,Oð  ,Oð  ,OØ*bðð ñ
ô 
ð 
ð à 4˜˜¨5°D¨=¨=¸DÀCºK¸Kð ˜6‘\�\àñ�‘ð  Ð%Ð%¨°4¨¨Åð Eð Eð Eð EànðEñ Eô Eñ Bô B¨ð ˜T�>�> V¨t ^ ^Ø(,Ð%Ø˜Ð.Ð.Ø—O’Oà(2Ø$/Ø*-°©'Ø),¯ª°Ñ)=Ô)=Ø%LØ+}ÐW[Ð+}Ð+}Ð+}Ø*Dðð ñ
ô 
ð 
ð " S°WÀ°_°_¨E¨EÈ#Ñ%NÑNÐ!Ñ!à $Ð&Ð&¨+¸Ð*=Ð*=Ø! S°WÀ°_°_¨E¨EÈ#Ñ%NÑNÐ!Ñ!à˜D�� L°DÐ$8Ð$8Ø# sÑ*Ð#Ñ#à˜TÐ!Ð! ]°dÐ%:Ð%:Ø! SÑ(Ð!Ñ!à˜D�� F¨d N N°hÀ$Ð6FÐ6FØ&*Ð#Ñ#ð ˜$��Ø  DÐ(Ð(Ø $Ð&Ð&Ø 4Ð'Ð'à'+Ð$ùð ˜sÒ"Ð"Ð'8¸CÒ'?Ð'?Ø�OŠOà *Ø'ØTð $UÐGXð  $Uð  $Uð  $Uð  $UØ"vðð ñô ð ð #×)Ò)à /Ø!+Ø!{Ø *ð *HÐ_pð  *Hð  *Hð  *Hð  *HØ Ý %Ð&7¸$Ñ&>ÀÑ BÔ BØ&,Ý(-Ð.?À$Ñ.FÈÑ.OÐQRÑ(SÔ(Sð
ð 
ñô ð ð ˜tÒ#Ð#Ð,=Ð#Ø�OŠOà )Ø'Ø\ð $SØ"lðð ñô ð ð #×)Ò)à 0Ø!+Ø!hØ *Ø)eÐCTÐW[ÑC[Ð)eÐ)eÐ)eÐ)eØ Ý %Ð&7¸$Ñ&>ÀÑ BÔ BØ&,Ý(-Ð.?À$Ñ.FÈÑ.OÐQRÑ(SÔ(Sð
ð 
ñô ð ð ˜sÒ"Ð" ~¸Ò';Ð';Ø(Ð+<Ñ<ˆKØ˜TÒ!Ð!Ø—’à$-Ø +Ø!nÐVaÐ!nÐ!nÐ!nÐ!nð (hÀ[ð  (hð  (hð  (hð  (hð 'Iðð ñô ð ð ð ˜uÒ$Ð$Ø—’à$*Ø +Ø!U¸[Ð!UÐ!UÐ!UÐ!Uð (sÀ[ð  (sð  (sð  (sð  (sØ&Uðð ñô ð ð  Ò%Ð%Ð*;¸sÒ*BÐ*BØ�OŠOà )Ø'Ø[ð $cÐGZð  $cð  $cð  $cð  $cð #Aðð ñô ð ð #×)Ò)à 0Ø!+Ø!~Ø +Ø,?À$Ñ,FÐ)sÐ)sÐ)sÐ)sØ Ý %Ð&9¸DÑ&@À!Ñ DÔ DØ&+Ý(-Ð.AÀDÑ.HÈ5Ñ.PÐRSÑ(TÔ(Tð
ð 
ñô ð ð  ˜Ð%Ð%Ø˜lÐ*Ð*Ø˜lÐ*Ð*Ø&ð +à�OŠOà &Ø'Øhð ${Ø"fðð ñô ð ð #×)Ò)à 0Ø!+ð "EØ /Ø)^Ø"Ø #Ø&.Ø(0ð
ð 
ñô ð ð "ÐØ(+Ð%Ø#&Ð Ø%(Ð"å! %Ñ(Ô(ð B	ñ B	‰HˆC�Ý�s—w’w˜{Ñ+Ô+Ð1¨rÑ2Ô2×8Ò8Ñ:Ô:ˆDÝ�s—w’w˜v‘”Ð,¨"Ñ-Ô-×3Ò3Ñ5Ô5ˆDÝ˜#Ÿ'š'Ð"2Ñ3Ô3ÐS°s·w²w¸|Ñ7LÔ7LÐSÐPSÑTÔTˆEð ˜dÐ"Ð" d¨d l lØ˜T�>�> V¨t ^ ^Ø*/Ð'Ð'Ýð ð ð ð ð	ðñ ô ñ ô ð õ 58Ø5°uñ5ô 5Ð1ð
  Ð$Ð$Ð(:¸dÐ(BÐ(BØ7=À°~°~ E¨E¡M MÈEÐ Ø˜d�?�?Ø1AÐ.Ð.Ø Ð%Ð%¨°$¨¨Ø/?Ð,ð  Ð$Ð$¨°tÐ(;Ð(;Ø9@ÀD¸¸ e¨e¡m mÈuÐ"ØÐ)Ð1Ð1Ò1Ð1¨EÒ1Ð1Ð1Ð1Ð1Ø—O’Oà(2Ø$2Ø*-°©'Ø),¯ª°Ñ)=Ô)=Ø%lÐL^Ð%lÐ%lÐ%lÐ%lð ,x¸#¿'º'À+Ñ:NÔ:Nð  ,xð  ,xÐafð  ,xð  ,xð  ,xÐquð  ,xð  ,xð  {Mð  ,xð  ,xð  ,xð  ,xð +`ðð ñ
ô 
ð 
ð  Ð%Ð%¨¸Ð)=Ð)=ÀÐTXÐAXÐAXØ˜$�� &¨D . .°G¸t°O°Oà9@ÀD¸¸ e¨e¡m mÈuÐ"Ø%¨Ò-Ð-Ø—O’Oà(1Ø$2Ø*-°©'Ø),¯ª°Ñ)=Ô)=ð &FÐewð  &Fð  &Fð  &Fð  &Fð ,P¸#¿'º'À+Ñ:NÔ:Nð  ,Pð  ,PÐmrð  ,Pð  ,Pð  ,Pð  ~Bð  ,Pð  ,Pð  ,Pð +Bðð ñ
ô 
ð 
ùð   !Ò#Ð#Ø-°Ò1Ð1Ø-Ð1DÒDÐDà�OŠOà *Ø*Ø^ð $HÐ=Zð  $Hð  $Hð  $Hð  nAð  $Hð  $Hð  $Hð  $Hð #gðð ñô ð ð % qÒ(Ð(Ø*Ð-EÒEÐEà�OŠOà )Ø*ð bÐ>Xð  bð  bð  bð  }Uð  bð  bð  bð  bð $zð #dð  uMð  PTñ  uTð  #dð  #dð  #dð  #dðð ñô ð õ ÐLÐL HÐLÑLÔLÑLÔLˆ
ÝÐKÐK HÐKÑKÔKÑKÔKˆ
ÝÐHÐH HÐHÑHÔHÑHÔHˆ
à ‘? z°A¡~Ñ6¸*Àq¹.ÑIˆÝ˜B¥ C¨¨w©Ñ 7Ô 7Ñ8Ô8ˆð  Ò"Ð"ð  Ðð ! BÒ&Ð&ð %Ð$ð %¨Ò*Ð*ð /Ð.à3ð 	ð  Ø*Ø*ØÝ#& u¡:¤:Ý! (™mœmØ(Ø'Ø$å%*Ð+<¸aÑ%@Ô%@Ý%*Ð+<¸aÑ%@Ô%@Ý"'¨¸Ñ":Ô":Ý$)¨.¸6Ñ*AÀ1Ñ$EÔ$Eà$ qÒ(Ð(õ */¨~Ð@QÑ/QÐSTÑ)UÔ)UÐ)Uàð % qÒ(Ð(õ -2Ø%Ð(9Ñ9¸1ñ-ô -ð -ð Ý',Ð-@À!Ñ'DÔ'DÝ%*Ð+<¸aÑ%@Ô%@ðð ð  !Ø'=ð7
ð 
ð 	
r0   N)r   r   )r	   r
   r   r   r   r   r   r   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚclassmethodrŒ   r*   r0   r.   r   r      sL   € € € € € ØNÐNàð -Ø=ð	U
ð U
ð U
ð U
ñ „[ðU
ð U
ð U
r0   r   )Ú
__future__r   ÚloggingÚtypingr   Ú	getLoggerÚloggerr   r*   r0   r.   ú<module>r—      sˆ   ðØ "Ð "Ð "Ð "Ð "Ð "ðð
 €€€Ø Ð Ð Ð Ð Ð à	ˆÔ	Ð8Ñ	9Ô	9€ðY
ð Y
ð Y
ð Y
ð Y
ñ Y
ô Y
ð Y
ð Y
ð Y
r0   