Ë
    î™jxb  ã                   óÀ   — d Z ddlZddlZddlZddlZddlZddlZej                  j                  dd«      Z	dZ
dZdd„Zdd„Zd	„ Zd
„ Zd„ Zd„ Zd„ Zedk(  r e«        yy)a   
Originals sync with mtime-based incremental detection.
Uses SQL temp-file approach for all server-side DB operations.
Usage: python3 originals_sync.py              # Full sync
       python3 originals_sync.py <offset>      # From offset
       python3 originals_sync.py <offset> <limit>
é    NÚORIGINALS_DIRuP   /Users/chniir0000outlook.com/Library/CloudStorage/OneDrive-ä¸ªäºº/originals notez	hw-backupz/root/originals.dbc                 óx  — d}t        |dd¬«      5 }|j                  | «       ddd«       t        j                  d|› dt        › d�d	d	d
¬«       t        j                  dt        › dt
        › d�d	d	d	|¬«      }t        j                  |«       t        j                  dt        › d�d	d	d¬«       |S # 1 sw Y   ŒŽxY w)z/Write SQL to temp file, scp to server, execute.z/tmp/originals_sql_temp.sqlÚwúutf-8©ÚencodingNúscp ú z:/tmp/osql.sqlTé   ©ÚshellÚcapture_outputÚtimeoutússh z
 "sqlite3 z < /tmp/osql.sql"©r   r   Útextr   z "rm -f /tmp/osql.sql"é
   ©ÚopenÚwriteÚ
subprocessÚrunÚ
SSH_TARGETÚDBÚosÚremove©Úsqlr   Ú	local_tmpÚfÚrs        ú#/root/gov_crawler/originals_sync.pyÚrun_sql_on_serverr#      s³   € à-€IÜ	ˆi˜ wÔ	/ð °1Ø	�‰�Œ÷ä‡N�N�T˜)˜ A¤j \°Ð@ÈÐ]aÐkmÕnÜ�‰Ø
Œzˆl˜+¤b TÐ);Ð<Ø 4¨d¸Gô	€Aô ‡I�IˆiÔÜ‡N�N�Tœ*˜Ð%=Ð>ÀdÐ[_ÐikÕlØ€H÷ð úó   ‘B0Â0B9c                 óx  — d}t        |dd¬«      5 }|j                  | «       ddd«       t        j                  d|› dt        › d�d	d	d
¬«       t        j                  dt        › dt
        › d�d	d	d	|¬«      }t        j                  |«       t        j                  dt        › d�d	d	d¬«       |S # 1 sw Y   ŒŽxY w)z.Run SELECT query and return stdout (raw text).z/tmp/originals_query_temp.sqlr   r   r   Nr	   r
   z:/tmp/oq.sqlTr   r   r   z "sqlite3 -separator '|' z < /tmp/oq.sql"r   z "rm -f /tmp/oq.sql"r   r   r   s        r"   Úquery_serverr&   !   s´   € à/€IÜ	ˆi˜ wÔ	/ð °1Ø	�‰�Œ÷ä‡N�N�T˜)˜ A¤j \°Ð>ÀdÐ[_ÐikÕlÜ�‰Ø
ŒzˆlÐ4´R°DÐ8HÐIØ 4¨d¸Gô	€Aô ‡I�IˆiÔÜ‡N�N�Tœ*˜Ð%;Ð<ÀDÐY]ÐgiÕjØ€H÷ð úr$   c                 ór  — | j                  dd«      }t        j                  d|«      }|r|j                  d«      dfS t        j                  d|«      }|r|j                  d«      dfS t        j                  d|«      }|r7|j                  d«      }|t	        |«      d	k(  rdfS t	        |«      d
k(  rdfS dfS y)Nú.txtÚ ú^(\d{7})(?:\s+(.*))?$é   Úplantú^(\d{9})(?:\s+(.*))?$Úcpiz^(\d+)-é	   é   Úpharma)r)   r1   )ÚreplaceÚreÚmatchÚgroupÚlen)ÚfilenameÚnameÚm7Úm9ÚmdÚcodes         r"   Úclassifyr=   /   s³   € Ø×Ñ˜F BÓ'€DÜ	�‰Ð*¨DÓ	1€BÙ	�"—(‘(˜1“+˜wÐ&Ð&Ü	�‰Ð*¨DÓ	1€BÙ	�"—(‘(˜1“+˜uÐ$Ð$Ü	�‰�*˜dÓ	#€BÙ	Ø�x‰x˜‹{ˆØœc $›i¨1šn�UÐ[Ð[¼cÀ$»iÈ1ºn°7Ð[Ð[ÐRZÐ[Ð[Øó    c                 óH   — t        | xr t        j                  d| «      «      S )uM   å�ˆæ ¼æ ‡é¢˜ç»“å°¾: é¡¹ç›®è¯�ç»“å°¾, å�¯å¸¦ï¼ˆNæœŸï¼‰/è£¸æœŸæ¬¡/ï¼ˆNæœŸï¼‰å°¾u•   (é¡¹ç›®|å·¥ç¨‹|è£…ç½®|æŠ€æ”¹|æ‰©å»º|ä¸€ä½“åŒ–|åŸºåœ°|ç”Ÿäº§çº¿|åŽ‚)(?:ï¼ˆ[^ï¼ˆï¼‰]{0,14}ï¼‰|\([^()]{0,14}\)|[ä¸€äºŒä¸‰å››äº”å…­ä¸ƒå…«ä¹�å��\d]+æœŸ)?$©Úboolr3   Úsearch)Úts    r"   Ú	_good_endrD   ;   s2   € ä�ò  }”b—i‘ið  !yð  {|ó  }ó  ~ð  ~r>   c                 óÎ  — | sy| j                  «       } t        dt        | «      dz  dz   «      D ]9  }| d| }| j                  ||z   «      sŒ| t        |«      d j                  «       }  n d„ }dD ],  }| j	                  |«      }|dkD  sŒ| d| j                  «       } Œ.  || «      } t        | «      s¯t        j                  d| «      }|r—| d|j                  «        j                  «       }| |j                  «       d j                  «       }|rS|j                  d	«      sBt        j                  d
|«      r,t        |«      dk\  rt        j                  d|«      r ||«      } dD ],  }	| j	                  |	«      }
|
dkD  sŒ| d|
 j                  «       } Œ. t        t        j                  d| «      «      }t        | «      dkD  r|t        | «      z  dk  ry| rt        | «      dk  ry| dd S )ub   å‡€åº¦å�Žå¤„ç�†: åŽ»é‡�å¤�æ‹¼æŽ¥ç‰‡æ®µ/å°¾æ®‹ç•™/è¶…é•¿ã€‚è¿”å›žæ¸…æ´—å�Žæ ‡é¢˜, å¤ªè„�è¿”å›ž NoneNé   é   r+   c                 ón  — t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      } t        j                  dd| «      j                  «       } t        j                  dd| «      j                  «       } t        j                  dd	| «      } | j                  «       S )
Nu©   (é¡¹ç›®æ¦‚å†µ|çŽ¯å¢ƒå½±å“�è¯„ä»·|çŽ¯å¢ƒå½±å“�æŠ¥å‘Š|çŽ¯è¯„|çŽ°çŠ¶çŽ¯å¢ƒå½±å“�è¯„ä»·|çš„å…¬ç¤º|å…¬ç¤º$|ç¬¬ä¸€æ¬¡|ç¬¬äºŒæ¬¡|æŠ¥æ‰¹å‰�|å…¬ä¼—å�‚ä¸Ž|å¾�æ±‚æ„�è§�ç¨¿)ä¿¡æ�¯?$r)   u:   ^(é¡¹ç›®æ ‡é¢˜|æ ‡é¢˜|é¡¹ç›®å��ç§°|é¡¹ç›®å��)\s*[:ï¼š]?\s*u   (é¡¹ç›®){2,}$õ   é¡¹ç›®u   [ã€�\[ï¼ˆ(]+$u   ^[ã€‘\]ï¼‰)]+u&   (é¡¹ç›®|å·¥ç¨‹)([å¤§ä¸­å°�])åž‹é¡¹ç›®$z\1)r3   ÚsubÚstrip©Úss    r"   Ú_tail_cleanz _tidy_title.<locals>._tail_cleanK   s¤   € ä�F‰Fð  @ð  BDð  FGó  HˆÜ�F‰FÐPÐRTÐVWÓXˆÜ�F‰FÐ# X¨qÓ1ˆä�F‰FÐ# R¨Ó+×1Ñ1Ó3ˆÜ�F‰FÐ# R¨Ó+×1Ñ1Ó3ˆä�F‰FÐ<¸eÀQÓGˆØ�w‰w‹yÐr>   )"u   é¡¹ç›®ç¼–å�·u   é¡¹ç›®åŸºæœ¬ä¿¡æ�¯u   è¯¦ç»†åœ°å�€u   é¡¹ç›®é€‰å�€u   é¢„ç®—æŠ•èµ„u   æŠ•èµ„æ€»é¢�u	   æŠ•èµ„é¢�u   å� åœ°é�¢ç§¯u   å¤‡æ¡ˆu   å·¥ä¸šé¡¹ç›®u   æ——åŽ¿äº§ä¸šç±»é¡¹ç›®u   è·Ÿè¸ªu	   ï¼ˆVIPï¼‰z(VIP)u   ç‰ˆæœ¬u   ä¸€æœŸå»ºè®¾u   äºŒæœŸå»ºè®¾u   ä¸‰æœŸå»ºè®¾u   å››æœŸå»ºè®¾u   å½“å‰�é˜¶æ®µu   ç«‹é¡¹ç”³æŠ¥u   æ‰‹ç»­å®¡æ‰¹õ   é¡¹ç›®å��ç§°õ   é¡¹ç›®æ ‡é¢˜u	   é¡¹ç›®å��u   ï¼ˆVIPz(VIPu	   ï¼ˆè·Ÿè¸ªu   çŽ¯å¢ƒå½±å“�è¯„ä»·u   å…¬ä¼—å�‚ä¸Žu   å�—ç�†u	   æ‹Ÿå®¡æ‰¹u   å…¬ç¤ºu   å…¬å‘Šr   u9   (é¡¹ç›®|å·¥ç¨‹|è£…ç½®|æŠ€æ”¹|æ‰©å»º|åŸºåœ°|ç”Ÿäº§çº¿|åŽ‚))u   ï¼ˆú(z\dé   )u   ç”µè¯�u   é‚®ç®±ÚSheetzwww.Ú______ú[\u4e00-\u9fff]g      à?éd   )
rK   Úranger6   Ú
startswithÚfindrD   r3   rB   ÚendÚfindall)rC   Úunit_lenÚunitrN   Ú_markerÚ_iÚ_mmÚ_preÚ_tail2ÚbadÚidxÚcjks               r"   Ú_tidy_titlerf   ?   sÎ  € áØØ	�‰‹	€Aô ˜!œS ›V q™[¨1™_Ó-ò ˆØ��(ˆ|ˆØ�<‰<˜˜t™Õ$Ø”#�d“)�*�×#Ñ#Ó%ˆAÙð	ò

ðeò ˆð
 �V‰V�G‹_ˆØ�‹6Ø�#�2�—‘“‰Aðñ 	�A‹€Aô �QŒ<Ü�i‰iÐTÐVWÓXˆÙØ�Z�c—g‘g“i�=×&Ñ&Ó(ˆDØ�s—w‘w“y�z�]×(Ñ(Ó*ˆFÙ˜v×0Ñ0°Ô>Ä2Ç9Á9ÈUÐTZÔC[Ü˜D›	 Qš¬2¯9©9Ð5qÐswÔ+xÙ Ó%�à>ò  ˆØ�f‰f�S‹kˆØ�‹7Ø�$�3�—‘“‰Að ô
 Œb�j‰jÐ+¨QÓ/Ó
0€CÜ
ˆ1ƒv�‚z�cœC ›F‘l SÒ(ØÙ”�A“˜’
ØØˆTˆcˆ7€Nr>   c                 óŠ  ‡>‡?‡@— | j                  dd«      }|�r|j                  d«      D �cg c]2  }|j                  «       j                  d«      d   j                  «       ‘Œ4 c}Š>‰>rxt        j                  d‰>d   «      }|r]t        j
                  dd|j                  d«      j                  «       j                  d	«      «      }t        |«      }|rt        |«      r|S dddddddddd
d
dœ}t        j                  d«      }t        j                  d«      }	ˆ>fd„}
g }t        ‰>«      D �]Ý  \  }}t        j                  d|«      }|sŒ |j                  |j                  d«      j                  «       «      }|€ŒQ|j                  d
«      j                  «       j                  d	«      }t        j
                  dd|«      }t        j
                  dd|«      }t        j                  d|«      d   j                  «       }|	j                  d|«      }dt        |«      cxk  rdk  ren nbt        j                  d|«      rLt        j                  d|«      s6t        j                  d|t        j                   «      s|j	                  |«      r�Œat        |«      }|s�Œpt        |«      r|j#                  |||f«       �Œ‘ |
||«      }|r|j#                  |||f«       �Œ²t        j                  d|«      s�ŒÊ|j#                  |||f«       �Œà |�r>|D �cg c]  }t        |d
   «      sŒ|‘Œ }}|r|n|}d„ Š?|j%                  ˆ?fd„¬«       |d   d
   } ‰?|«      sð‰>D ]ë  }t        j                  d|«      }|sŒ|j                  d
«      j                  «       j                  d	«      }t        j
                  dd|«      }t        |«      }|sŒodt        |«      cxk  rdk  sŒ„n Œ‡t        j                  d|«      sŒžt        j                  d|«      rŒµ|j'                  |d d «      rŒÊ||z   }t        |«      d k  rt        |«      r|} |S  |S ‰>rÐ‰>d   }t        j                  d!|«      D ]²  }t        j                  d"|«      }t        |«      d
k\  sŒ(|d#   j                  «       }d$t        |«      cxk  rdk  sŒPn ŒSt)        |d   «      d%kD  sŒet        j                  d&|«      sŒ|t        j                  d'|t        j                   «      rŒ¢t        |«      } | sŒ°| c S  |�r†|j                  d«      d   j                  d«      d   }!|!j                  d(«      }"t        |"«      d)k\  �r@|"d
   j                  d*«      d   j                  «       }#t        j                  d"|#«      d   j                  «       xs |#Š@t+        ˆ@fd+„d,D «       «      s¨t        j                  d-‰@d d. «      }$|$xs t        j                  d/‰@d d0 «      }$‰@rpt        ‰@«      d$kD  rbt)        ‰@d   «      d%kD  rQt        j                  d1‰@«      s|$r9t+        ˆ@fd2„d3D «       «      r%t        ‰@«      }%|%rt        j                  d4|%«      r|%S t        |#«      d5kD  r”d6|#v r�t        j,                  d7|#«      }&|&D ]u  }'|'j                  «       }'|'j/                  d8«      sŒ%t        |'«      d$kD  sŒ4t        j                  d-|'d d9 «      sŒNt        |'«      }(|(sŒ\t        j                  d:|(«      sŒs|(c S  t        |#«      d kD  r„d;|"d   v r|"d   j                  d;«      d   nd})t        j                  d<|#d d= «      }*|)rI|*rG|)|*j                  d«      z   }+t        |+«      d5k  r%t        |+«      },|,rt        j                  d:|,«      r|,S |r{t        "«      d
k\  rmt        |"«      d)k  s|"d
   j                  «       sL|"d   j                  «       }-t        j                  d>|-d d5 «      }.|.rt        |.j                  d«      «      }/|/r|/S |rÐt        "«      dkD  rÂ|"d   j                  «       r¯|"d   j                  «       }0|0ršt)        |0d   «      d%kD  r‰t        |0«      d k  r{t        |"«      d?kD  r|"d?   nd|"d
   fD ]\  }1t        j                  d@|1«      }2|2sŒ|2j                  d«      j                  «       j1                  «       }3|0}4t        |4«      dAkD  sŒZ|4c S  |0S t        j                  dB|«      }5|5r0|5j                  d
«      r|5j                  d
«      j                  «       S t        j                  dC|«      }6|6r0|6j                  d
«      r|6j                  d
«      j                  «       S t        j                  dD|«      s|j                  «       S |rë|j                  d«      D �cg c]2  }|j                  «       j                  d«      d   j                  «       ‘Œ4 c}d d }7t3        t        |7«      dz
  «      D ]�  }8|7|8   |7|8dz      }'}9|9sŒ|9|'k(  sŒdt        |9«      cxk  rdEk  sŒ.n Œ1t)        |9d   «      d%kD  sŒCt        j                  dF|9«      sŒZt        j                  dG|9«      rŒqt        |9«      }:|:sŒ|:c S  |r™|j                  d«      d   j                  «       j                  d«      d   j                  «       };t        j
                  dHd|;«      }<|<r'|<|;k7  r"t        |<«      }=|=r|=S |<j                  «       d d  S |;d d  j                  «       xs |S |S c c}w c c}w c c}w )INr(   r)   ú
úr   u>   ^\d+\t(?:é¡¹ç›®å��ç§°|é¡¹ç›®æ ‡é¢˜|é¡¹ç›®å��)\s*[:ï¼š]\s*(.+)$u   ^\s*[\-â€”]+r+   u   ã€‚.ï¼›;ï¼Œ,ã€�:ï¼šrG   )u   é¡¹ç›®ä¿¡æ�¯rO   u   å·¥ç¨‹å��ç§°u   å»ºè®¾é¡¹ç›®å��ç§°rP   u   å…¬å�¸å��ç§°&é¡¹ç›®å��ç§°u   é¡¹ç›®å��ç§°&å…¬å�¸å��ç§°u   å…¬å�¸å��ç§°u   ä¼�ä¸šå��ç§°ÚTYPEÚ
Researcherui   ^(é¡¹ç›®ç¼–å�·|é¡¹ç›®åŸºæœ¬ä¿¡æ�¯|é¡¹ç›®å��ç§°å�Šæ¦‚è¦�|é¡¹ç›®æ¦‚å†µ|ç›®å½•|é¡¹ç›®ç±»åž‹|é¡¹ç›®æ‰€åœ¨åœ°)u�   ^(æ‹Ÿåœ¨å»º|æŠ¥æ‰¹ç«‹é¡¹|æ‰‹ç»­å®¡æ‰¹|æ–½å·¥å›¾è®¾è®¡|å·¥ç¨‹è®¾è®¡|ç«‹é¡¹ç”³æŠ¥|å·²æŠ•äº§|æ­£åœ¨è�½å®ž|æ‹Ÿå»º|åœ¨å»º|ç«£å·¥|æš‚å�œ|å·²ç«£å·¥)\s*c           	      óD  •— | }t        |dz   t        |dz   t        ‰«      «      «      D ]u  }‰|   j                  «       }|r,t	        j
                  d|«      st	        j                  d|«      r y ||z   j                  «       }t        |«      }|sŒgt        |«      sŒs|c S  y )Nr+   é   u   [:ï¼š]u  ^(å…¬å�¸å��ç§°|é¡¹ç›®ä¿¡æ�¯|é¡¹ç›®å��ç§°|å·¥ç¨‹å��ç§°|ä¼�ä¸šå��ç§°|Researcher|TYPE|ID|Unnamed|é¡¹ç›®è·Ÿè¸ªç‰ˆæœ¬|é¡¹ç›®åŸºç¡€|æ›´æ–°æ—¶é—´|å�‘å¸ƒæ—¶é—´|è·Ÿè¸ªç‰ˆæœ¬å�·|é¢„ç®—æŠ•èµ„|æ‰€å±ž|å»ºè®¾ç­‰çº§|è�”ç³»äºº|æ‰‹æœº|é‚®ç®±|ç”µè¯�|é¡¹ç›®ç±»åž‹|å…¬å�¸ç®€ä»‹))	rW   Úminr6   rK   r3   rB   r4   rf   rD   )Ú_baseÚ_liÚ_accÚ_jÚ_nxtÚ_jtÚ
_all_liness         €r"   Ú	_try_joinz extract_title.<locals>._try_join“   s¦   ø€ àˆDÜ˜C !™G¤S¨¨q©´#°j³/Ó%BÓCò �Ø! "‘~×+Ñ+Ó-�Ù¤§	¡	¨)°TÔ :ÜŸ8™8ð  %jð  lpô  qØð
 ð	 ˜t™×*Ñ*Ó,�Ü! $Ó'�Úœ9 S�>Ø’Jðð r>   u"   ^([^:ï¼š]{0,12}?)\s*[:ï¼š]\s*(.+)$u   ^\d+\s*[ã€�.ï¼Ž)ï¼‰]\s*z	\s+\d{6,}rR   éx   rU   u&   [\d\s.ï¼Žã€�ï¼Œ,ã€‚%ï¼…/ï¼�()ï¼ˆï¼‰-]+u)   (ç”µè¯�|é‚®ç®±|æ‰‹æœº|ä¼ çœŸ|Sheet|www\.)uM   (é¡¹ç›®|å·¥ç¨‹|è£…ç½®|æŠ€æ”¹|æ‰©å»º|å¹´äº§|åŸºåœ°|ä¸€ä½“åŒ–|ç”Ÿäº§çº¿|è�”äº§)c                 ó@   — t        t        j                  d| «      «      S )NuF   (æœ‰é™�å…¬å�¸|æœ‰é™�è´£ä»»å…¬å�¸|è‚¡ä»½æœ‰é™�å…¬å�¸|å…¬å�¸|é›†å›¢|åŽ‚)r@   rL   s    r"   ú<lambda>zextract_title.<locals>.<lambda>Â   s   € ¤$¤r§y¡yÐ1zÐ|}Ó'~Ó"€ r>   c                 ó4   •—  ‰| d   «      rdnd| d   | d   fS )NrG   r   r+   © )ÚcÚ	_has_comps    €r"   ry   zextract_title.<locals>.<lambda>Ã   s"   ø€ ©9°Q°q±T¬?¡aÀÀ1ÀQÁ4ÈÈ1ÉÐ%N€ r>   )Úkeyu-   ^(å…¬å�¸å��ç§°|ä¼�ä¸šå��ç§°)\s*[:ï¼š]\s*(.+)$rm   é(   uG   (æœ‰é™�å…¬å�¸|æœ‰é™�è´£ä»»å…¬å�¸|è‚¡ä»½æœ‰é™�å…¬å�¸|å…¬å�¸|é›†å›¢|åŽ‚)$rF   rV   z\tz_{3,}éÿÿÿÿr   é   u   (é¡¹ç›®|å·¥ç¨‹|è£…ç½®)$u:   (ç”µè¯�|é‚®ç®±|æ‰‹æœº|ä¼ çœŸ|Sheet|www\.|GRASSROOT|PLANT$)ú	é   z  c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w©N)rX   )Ú.0r   Úp2_cleans     €r"   ú	<genexpr>z extract_title.<locals>.<genexpr>ó   s"   øè ø€ ò  T°!�x×*Ñ*¨1×-ñ  Tùs   ƒ)u   è€…u   è®°u   æˆ‘u   ä»Šu   è¿‘u   æ˜¨u   é¡¹u   æœ¬u   ä»Žu   ä½�u   å·¥u   éš�u   æ�¥u=   ^[\u4e00-\u9fff]+?(?:æœ‰é™�å…¬å�¸?|æœ‰é™�è´£ä»»å…¬å�¸|åŒ–å·¥)é   u#   ^[\u4e00-\u9fff]+?(?:å…¬å�¸|åŒ–å·¥)é   u/   (é¡¹ç›®|å·¥ç¨‹|è£…ç½®|æŠ€æ”¹|ä¸€ä½“åŒ–|åŸºåœ°)$c              3   ó&   •K  — | ]  }|‰v –— Œ
 y ­wr…   r{   )r†   Úkwr‡   s     €r"   rˆ   z extract_title.<locals>.<genexpr>ø   s   øè ø€ Òq¨b˜2 œ>Ñqùs   ƒ)rI   u   è£…ç½®u   æ‰©å»ºu   æŠ€æ”¹u   å¹´äº§u   å·¥ç¨‹uF   (é¡¹ç›®|è£…ç½®|æ‰©å»º|æŠ€æ”¹|å¹´äº§|å·¥ç¨‹|åŸºåœ°|ä¸€ä½“åŒ–|ç”Ÿäº§çº¿)éÈ   Ú______________u   _{3,}(.*?)(?=_{3,}|\(æŽ¨è��\))rI   é   u?   (é¡¹ç›®|å·¥ç¨‹|è£…ç½®|æŠ€æ”¹|æ‰©å»º|åŸºåœ°|ä¸€ä½“åŒ–|ç”Ÿäº§çº¿)rT   u6   (å¹´äº§\d+[ä¸‡å�ƒ][å�¨ç“¦].*?(?:å·¥ç¨‹|é¡¹ç›®|è£…ç½®))iô  uS   ^([\u4e00-\u9fff]+?(?:æœ‰é™�å…¬å�¸?|æœ‰é™�è´£ä»»å…¬å�¸).*?(?:é¡¹ç›®|å·¥ç¨‹|è£…ç½®))r0   z1(?:GRASSROOT|UNIT ADDITION|PHASE)\s*(.*?)(?:\t|$)é   r-   r*   z^\d+$éP   u<   (å·¥ç¨‹|é¡¹ç›®|è£…ç½®|æŠ€æ”¹|æ‰©å»º|å¹´äº§|åŸºåœ°|ä¸€ä½“åŒ–)u*   (ç”µè¯�|é‚®ç®±|ä¼ çœŸ|æ‰‹æœº|åœ°å�€|Sheet)z^\d+\t)r2   ÚsplitrK   r3   r4   rJ   r5   Úrstriprf   rD   ÚcompileÚ	enumerateÚgetr6   rB   Ú	fullmatchÚIÚappendÚsortrX   ÚordÚanyr[   ÚendswithÚlowerrW   )Ar7   Úcontentr8   ÚlÚ_m0Ú_v0Ú_t0Ú_R1_PREFÚ_LABEL_JUNKÚ
_STAGE_PFXrv   Ú_candsrp   Ú_lÚ_pmÚ_rankÚ_vÚ_vvÚ_jvr|   Ú_goodÚ_poolÚ_bestÚ_l2Ú_m2Ú_cvÚ_cv2Ú_mergedÚ_flÚ_segÚ_puÚ_tailÚ_ttÚ
first_lineÚpartsÚp2Ústarts_with_companyÚ_m1ÚbetweenÚbÚ_m2tÚchinese_companyÚ	proj_descÚcombinedÚ_m3tÚp1Ú
proj_matchÚ_p1tÚcn_nameÚsrcÚdescÚengÚshortr:   r9   ÚlinesÚiÚaÚ_nlÚflÚfdÚ_fbru   r}   r‡   sA                                                                 @@@r"   Úextract_titlerÖ   x   s
  ú€ Ø×Ñ˜F BÓ'€DâØ@GÇÁÈdÓ@SÖT¸1�a—g‘g“i—o‘o dÓ+¨AÑ.×4Ñ4Õ6ÒTˆ
ñ Ü—(‘(Ð\Ð^hÐijÑ^kÓlˆCÙÜ—f‘f˜_¨b°#·)±)¸A³,×2DÑ2DÓ2F×2MÑ2MÐNcÓ2dÓe�Ü! #Ó&�Ùœ9 Sœ>Ø�Jð ¨qÀ!Ð[\ÐnoØ)*ÈØ¨qØ Qñ	
ˆô —j‘jð  "Nó  OˆÜ—Z‘Zð  !tó  uˆ
ô	ð ˆÜ  Ó,ó 	9‰GˆC�Ü—(‘(Ð@À"ÓEˆCÙØØ—L‘L §¡¨1£×!3Ñ!3Ó!5Ó6ˆEØˆ}ØØ—‘˜1“×#Ñ#Ó%×,Ñ,Ð-BÓCˆBä—‘˜¨¨RÓ0ˆBÜ—‘Ð2°B¸Ó;ˆBä—‘˜,¨Ó+¨AÑ.×4Ñ4Ó6ˆBØ—‘  BÓ'ˆBØœ˜R›Ô' CÕ'¬B¯I©IÐ6HÈ"Ô,MÜŸL™LÐ)RÐTVÔWÜŸI™IÐ&RÐTVÔXZ×X\ÑX\Ô]Ø'×-Ñ-¨bÔ1ÙÜ˜b“/ˆCÛÜ˜S”>Ø—M‘M 5¨#¨sÐ"3Ö4á# C¨Ó-�CÙØŸ™ u¨c°3Ð&7Ö8ÜŸ™Ð#sÐuxÖyØŸ™ u¨c°3Ð&7Ö8ð9	9ò: Ø &Ö:˜1¬)°A°a±D­/’QÐ:ˆEÐ:Ù"‘E¨ˆEáˆIØ�J‰JÓNˆJÔOØ˜!‘H˜Q‘KˆEñ ˜UÔ#Ø%ò �CÜŸ(™(Ð#SÐUXÓY�CÙØ ØŸ)™) A›,×,Ñ,Ó.×5Ñ5Ð6KÓL�CÜŸ&™& °"°cÓ:�CÜ& sÓ+�DÚ ¤c¨$£iÔ!5°2Ö!5Ü "§	¡	Ð*tÐvzÕ {Ü$&§I¡IÐ.~ð  AEõ  %FØ$)×$4Ñ$4°T¸"¸1°XÕ$>Ø"&¨¡,˜Ü˜w›<¨3Ò.´9¸WÔ3EØ$+˜EØØˆLðð ˆLñ Ø˜Q‘-ˆCÜŸ™ ¨Ó,ò 	'�Ü—h‘h˜x¨Ó.�Ü�s“8˜q“=Ø ™GŸM™M›O�EØœc %›jÔ/¨CÖ/´C¸¸a¹³MÀDÓ4HÜ "§	¡	Ð*DÀeÕ LÜ$&§I¡IÐ.kÐmrÔtv×txÑtxÕ$yÜ)¨%Ó0˜ÚØ#&šJð	'ò Ø—]‘] 4Ó(¨Ñ+×1Ñ1°$Ó7¸Ñ:ˆ
Ø× Ñ  Ó&ˆÜˆu‹:˜‹?Ø�q‘—‘ Ó% aÑ(×.Ñ.Ó0ˆBä—x‘x ¨"Ó-¨aÑ0×6Ñ6Ó8Ò>¸BˆHô ó  Tð  8Sô  Tô  TÜ&(§h¡hÐ/oÐqyÐz}Ð{}Ðq~Ó&Ð#Ø&9Ò&|¼R¿X¹XÐFlÐnvÐwzÐxzÐn{Ó=|Ð#Ù¤ H£°Ò 2´s¸8ÀA¹;Ó7GÈ$Ò7NÜŸ	™	Ð"TÐV^Ô_ÑcvÜÓqÐ4pÔqÔqÜ% hÓ/�CÙœrŸy™yÐ)rÐtwÔxØ"˜
ô �2‹w˜Š}Ð!1°RÑ!7ÜŸ*™*Ð%FÈÓK�Ø ò (�AØŸ™›	�AØ—z‘z (Õ+´°A³¸³ÜŸ8™8Ð$dÐfgÐhkÐikÐflÕmÜ*¨1›~˜Ú¤B§I¡IÐ.pÐrvÕ$wØ#'šKð(ô �2‹w˜Š}ØAIÈUÐSTÉXÑAU %¨¡(§.¡.°Ó":¸1Ò"=Ð[]�ÜŸI™IÐ&_ÐacÐdhÐehÐaiÓj�	Ù"¡yØ.°·±ÀÓ1CÑC�HÜ˜8“} sÒ*Ü*¨8Ó4˜Ù¤B§I¡IÐ.pÐrvÔ$wØ#'˜Kñ ”3�u“: ’?¬¨E«
°Qª¸eÀA¹h¿n¹nÔ>NØ�1‰X�^‰^Óˆä—X‘XÐtÐvxÐy}Ðz}Ðv~Óˆ
ÙÜ˜z×/Ñ/°Ó2Ó3ˆDÙØ�ñ ”3�u“: ’> e¨A¡h§n¡nÔ&6Ø˜‘(—.‘.Ó"ˆÙ”s˜7 1™:“¨Ò-´#°g³,ÀÒ2Dä$'¨£J°¢N˜˜aš¸¸EÀ!¹HÐEò %�Ü—y‘yÐ!UÐWZÓ[�ÚØŸ*™* Q›-×-Ñ-Ó/×5Ñ5Ó7�Cà#�EÜ˜5“z A“~Ø$šð%ð ˆNô 
�‰Ð*¨DÓ	1€BÙ	ˆb�h‰h�qŒkØ�x‰x˜‹{× Ñ Ó"Ð"Ü	�‰Ð*¨DÓ	1€BÙ	ˆb�h‰h�qŒkØ�x‰x˜‹{× Ñ Ó"Ð"Ü�8‰8�H˜dÔ#Ø�z‰z‹|Ðñ Ø;B¿=¹=ÈÓ;NÖO°a�—‘“—‘ Ó& qÑ)×/Ñ/Õ1ÒOÐPRÐQRÐSˆÜ”s˜5“z A‘~Ó&ò 	ˆAØ˜‘8˜U 1 q¡5™\ˆqˆAÚ�a˜1“f ¤c¨!£fÔ!2°Ö!2Ü˜A˜a™D›	 DÓ(ÜŸ	™	Ð"aÐcdÕeÜŸI™IÐ&SÐUVÕWÜ! !“n�ÚØ’Jð	ñ Ø�]‰]˜4Ó  Ñ#×)Ñ)Ó+×1Ñ1°$Ó7¸Ñ:×@Ñ@ÓBˆÜ�V‰V�I˜r 2Ó&ˆÙ�"˜’(Ü˜b“/ˆCÙØ�
Ø—8‘8“:˜d˜sÐ#Ð#Ø�$�3ˆx�~‰~ÓÒ' 4Ð'Ø€Kùòi UùòF ;ùòx Ps   ¬7l6Ìl;Ì&l;ç7m c                  ó„  — t        t        j                  «      dkD  rt        t        j                  d   «      nd} t        t        j                  «      dkD  rt        t        j                  d   «      nd}t	        d«       t	        d«       t        d«      }i }|j                  j                  «       j                  d«      D ]*  }d|v sŒ|j                  dd«      \  }}t        |«      ||<   Œ, t        d	t        |«      › d
�«       t        t        j                  t        «      D �cg c]  }|j                  d«      r|dk7  r|‘Œ c}«      }|dkD  r	|| | |z    }n
| dkD  r|| d  }t        dt        |«      › d| › d|dk(  rdn|› d�«       g }	d}
|D ]ƒ  }t        j                   j#                  t        |«      }	 t        j$                  |«      j&                  }|j)                  |«      }|�t+        ||z
  «      dk  r|
dz  }
Œq|	j-                  ||f«       Œ… t        dt        |	«      › d|
› d�«       |	st        d«       y d}d}i }d}t/        dt        |	«      |«      D �]5  }|	|||z    }g }g }|D �]   \  }}t        j                   j#                  t        |«      }	 	 t1        |dd¬«      5 }|j3                  «       }d d d «       t;        |«      \  }}t=        |«      }t?        j@                  d"|xs d#«      }|rit?        j@                  d$|«      s-t        |«      dkD  s|rCt        |jC                  d«      «      d%k\  r&tE        |«      }|r|}n|r|n|jG                  dd#«      }|j)                  |d«      dz   ||<   |rd&|› d&�nd'} |jG                  d&d(«      }!|d d) jG                  d&d(«      }"|j-                  d*|› d+| › d,|!› d-|"› d.�	«       tI        jJ                  d/«      }#|jG                  d&d(«      }$|j-                  d0|$› d1|› d2|#› d.�«       |dz  }�Œ£ |r'd3dj#                  ||z   «      z   d4z   }%t	        |%d5¬6«       tM        d|t        |«      z   dz  t        |	«      z  «      }&t        d7|t        |«      z   › d8t        |	«      › d9|› d:|› d;|&› d<�«       �Œ8 t        d=«      }'t        d>«      }(t        dd?› �«       t        d@«       t        dA|
› �«       t        dB|› �«       t        dC|› �«       t        dDtO        jP                  |dE¬F«      › �«       t        dG|'j                  j                  «       › �«       |(j                  j                  «       j                  d«      D ]K  }|j                  «       sŒ|j                  d«      })t        dH|)d   › d!t        |)«      dkD  r|)d   nd#› �«       ŒM y c c}w #  |
dz  }
Y �Œ/xY w# 1 sw Y   �Œ	xY w# t4        $ r» 	 t1        |dd¬«      5 }|j3                  «       }d d d «       n# 1 sw Y   nxY wn�# t4        $ ru 	 t1        |dd¬«      5 }|j3                  «       }d d d «       n# 1 sw Y   nxY wn<# t4        $ r0 t1        |d«      j3                  «       }|j7                  dd¬«      }Y nw xY wY nw xY wY �ŒÏw xY w# t8        $ r!}t        d |› d!|› �«       |dz  }Y d }~�ŒLd }~ww xY w)INr+   r   rG   zbCREATE TABLE IF NOT EXISTS sync_tracker (filename TEXT PRIMARY KEY, mtime REAL, last_synced TEXT);zxCREATE UNIQUE INDEX IF NOT EXISTS idx_tsk_data_id_code ON tsk_data(id_code) WHERE id_code IS NOT NULL AND id_code != '';z)SELECT filename, mtime FROM sync_tracker;rh   ú|z[INFO] Tracker has z entriesr(   z000alerts.txtz[INFO] Scanning z files (offset=z, limit=Úallú)g{®Gáz„?z[INFO] mtime: z
 changed, z skipped (unchanged)z![DONE] No changes since last syncrV   r!   r   r   ÚgbkÚgb18030Úrbr2   )Úerrorsz[ERR] Read z: z
(.{8,}?)\1r)   z[\t_]{2,}|[A-Za-z]{4,}rR   ú'ÚNULLz''iPÃ  zKINSERT OR REPLACE INTO tsk_data (source, id_code, title, content) VALUES ('z',z,'z','z');z%Y-%m-%d %H:%M:%SzLINSERT OR REPLACE INTO sync_tracker (filename, mtime, last_synced) VALUES ('z', z, 'zBEGIN TRANSACTION;
z
COMMIT;é<   )r   z  [ú/z] +z errz (z%)zSELECT COUNT(*) FROM tsk_data;zFSELECT source, COUNT(*) FROM tsk_data GROUP BY source ORDER BY source;z2==================================================z[DONE]z  Skipped (mtime unchanged): z  Imported (new/changed):    z  Read errors:               z  Breakdown: F)Úensure_asciiz  DB total: z    ))r6   ÚsysÚargvÚintr#   r&   ÚstdoutrK   r’   ÚfloatÚprintÚsortedr   Úlistdirr   r�   ÚpathÚjoinÚstatÚst_mtimer–   Úabsr™   rW   r   ÚreadÚUnicodeDecodeErrorÚdecodeÚ	Exceptionr=   rÖ   r3   rB   r5   rf   r2   ÚtimeÚstrftimern   ÚjsonÚdumps)*ÚoffsetÚlimitr!   ÚtrackerÚlineÚfnÚmtr    ÚfilesÚchangedÚskippedr7   ÚfpÚcmtÚpmtÚimportedrÞ   ÚsbreakÚ
BATCH_SIZEÚbatch_startÚbatchÚdata_sql_linesÚtracker_sql_linesÚfhrŸ   ÚrawÚeÚid_codeÚsourceÚtitleÚ_duprº   ÚicÚtlÚctÚtsÚfn_sr   ÚpctÚr1Úr2r¼   s*                                             r"   Úmainr  T  s  € Ü!$¤S§X¡X£°Ò!2ŒS”—‘˜!‘Ô¸€FÜ #¤C§H¡H£°Ò 1ŒC”—‘˜‘Ô°q€Eô ð	Eôô ð	Lôô 	Ð@ÓA€AØ€GØ—‘—‘Ó ×&Ñ& tÓ,ò $ˆØ�$Š;Ø—Z‘Z  QÓ'‰FˆB�Ü ›)ˆG�BŠKð$ô 
Ð¤ G£˜~¨XÐ
6Ô7ô œrŸz™z¬-Ó8ö D˜!Ø—z‘z &Ô)¨a°?Ò.Bò ò Dó E€Eàˆq‚yØ�f˜V E™\Ð*‰Ø	�!ŠØ�f�g�ˆä	ÐœS ›Z˜L¨¸°x¸xÐQVÐXYÒQYÉÐ_dÐGeÐefÐ
gÔhà€GØ€GØò ,ˆÜ�W‰W�\‰\œ-¨Ó2ˆð	Ü—'‘'˜"“+×&Ñ&ˆCð �k‰k˜(Ó#ˆØˆ?œs 3¨¡9›~°Ò4Ø�q‰L‰Gà�N‰N˜H c˜?Õ+ð,ô 
ˆNœ3˜w›<˜.¨
°7°)Ð;OÐ
PÔQáÜÐ1Ô2Øð €HØ€FØ€FØ€Jä˜Q¤ G£¨jÓ9ó 8_ˆØ˜ K°
Ñ$:Ð;ˆØˆØÐà"ó ,	‰MˆH�cÜ—‘—‘œm¨XÓ6ˆBððJÜ˜b #°Ô8ð ,¸BØ"$§'¡'£)˜÷,ô& ' xÓ0‰OˆG�VÜ! (¨GÓ4ˆEä—9‘9˜]¨EªK°RÓ8ˆDÙœ"Ÿ)™)Ð$=¸uÔEÌÈUËÐVYÒIYÑ^bÔgjÐko×kuÑkuÐvwÓkxÓgyÐ}~Òg~Ü! %Ó(�ÙØ‘Eá(/™W°X×5EÑ5EÀfÈbÓ5Q�EØ#ŸZ™Z¨°Ó2°QÑ6ˆF�6‰Ná#*�1�W�I˜Q‘°ˆBØ—‘˜s DÓ)ˆBØ˜˜%�×(Ñ(¨¨dÓ3ˆBØ×!Ñ!Ð$oÐpvÐowÐwyÐz|Ðy}Ð}ð  ACð  @Dð  DGð  HJð  GKð  KNð  #Oô  Pä—‘Ð2Ó3ˆBØ×#Ñ# C¨Ó.ˆDØ×$Ñ$Ð'sÐtxÐsyÐy|ð  ~Að  }Bð  BEð  FHð  EIð  ILð  &Mô  NØ˜‰MŠHðY,	ñ\ Ø(¨4¯9©9°^ÐFWÑ5WÓ+XÑXÐ[fÑfˆCÜ˜c¨2Õ.ä�#˜¤c¨%£jÑ0°CÑ7¼3¸w»<ÑGÓHˆÜ��K¤ E£
Ñ*Ð+¨1¬S°«\¨N¸#¸h¸ZÀtÈFÈ8ÐSUÐVYÐUZÐZ\Ð]Ö^ðq8_ôv 
Ð6Ó	7€BÜ	Ð^Ó	_€Bä	ˆBˆvˆhˆ-ÔÜ	ˆFÔÜ	Ð)¨'¨Ð
3Ô4Ü	Ð)¨(¨Ð
4Ô5Ü	Ð)¨&¨Ð
2Ô3Ü	ˆMœ$Ÿ*™* V¸%Ô@ÐAÐ
BÔCÜ	ˆL˜Ÿ™Ÿ™Ó*Ð+Ð
,Ô-Ø—	‘	—‘Ó!×'Ñ'¨Ó-ò IˆØ�:‰:�<Ø—J‘J˜s“OˆEÜ�D˜˜q™˜
 "´°U³¸A² U¨1¢XÀ2Ð$FÐGÕHñIùòSDøð	Ø�q‰LˆGÚú÷:,ñ ,ûä)ò Jð	JÜ! " c°EÔ:ð 0¸bØ&(§g¡g£i˜G÷0÷ 0ñ 0üä-ò JðJÜ!% b¨#¸	Ô!Bð 4ÀbØ*,¯'©'«) ÷4÷ 4ñ 4üä1ò JÜ"& r¨4£.×"5Ñ"5Ó"7˜CØ&)§j¡j°¸y jÓ&IšGðJüð	JýðJûô ò Ü˜ H :¨R°¨sÐ3Ô4Ø˜!‘�ÝûðúsÒ   Ä&V/Æ7V4ÊWÊ)WÊ:WÖ4V>×W×W×	Z×X×&X 	×7	XØ X	ØXØZØ	Z	ØYØ%X?Ø6	YØ?YÙYÙZ	Ù6ZÚZ	ÚZÚZ	ÚZÚ
Z	ÚZÚZÚZÚZÚ	Z?ÚZ:Ú:Z?Ú__main__)rá   )r�   )Ú__doc__r   r3   rä   r÷   r   rõ   Úenvironr–   r   r   r   r#   r&   r=   rD   rf   rÖ   r  Ú__name__r{   r>   r"   ú<module>r      sz   ðñ÷ +× *× *ð —
‘
—‘˜ð  1Có  D€Ø€
Ø€óóò
ò~ò7òrXòxDIðL ˆzÒÙ…Fð r>   