Files
assist/src/__pycache__/main.cpython-311.pyc

109 lines
30 KiB
Plaintext
Raw Normal View History

2025-09-06 21:06:18 +08:00
<EFBFBD>
z"5i<35>N<00> <00><><00>ddlZddlZddlZddlmZmZmZmZddlmZm Z ej
<00> ej
<00> ej
<00> ej
<00> e<0E><00><00><00><00><00><00><00>ddlmZddlmZddlmZddlmZddlmZdd lmZdd
lmZdd lmZdd lm Z dd l!m"Z"ddl#m$Z$ddl%m&Z&ddl'm(Z(Gd<11>d<12><00>Z)d<13>Z*e+dkr e*<2A><00>dSdS)<15>N)<04>Dict<63>Any<6E>List<73>Optional)<02>datetime<6D> timedelta)<01>Config)<01> setup_logging<6E><01>
2025-09-06 21:06:18 +08:00
db_manager)<01>
QwenClient)<01>KnowledgeManager)<01>DialogueManager)<01>AnalyticsManager)<01> AlertSystem)<01>MonitorService)<01> TokenMonitor)<01>AISuccessMonitor)<01>SystemOptimizer)<01> WorkOrderc<00><><00>eZdZdZd<02>Zdeeeffd<04>ZdGdedede deeeffd <09>Z
dHd ed ed ededeeeff
d<0F>Z de de fd<10>Z dIdede deeeffd<14>ZdJdeded edede f
d<19>ZdKdedeeeffd<1C>Zdeeeffd<1D>Zdeeeffd<1E>Zd<1F>Zd <20>Zdeeeeffd!<21>Zdeeeeffd"<22>ZdHd#ed ed ed$edeeeff
d%<25>Zd&e de fd'<27>Zdeeeffd(<28>ZdLd*e deeeeffd+<2B>Zdeeeffd,<2C>ZdMded.e deeeffd/<2F>ZdNd1ed2e deeeffd3<64>ZdOd.e deeeeffd5<64>Z dPd.e deeeeffd6<64>Z! dQdede"e d*e d9e deeeeff
d:<3A>Z#d;e de fd<<3C>Z$dRdede"e de fd=<3D>Z%dOd.e deee ffd><3E>Z&dede fd?<3F>Z'd@edeeeffdA<64>Z(dBede fdC<64>Z)deeeffdD<64>Z*dEedeeeffdF<64>Z+dS)S<> TSPAssistantuTSP助手主类c<00><><00>ttjtj<00><00>t jt <00><00>|_t<00><00>|_ t<00><00>|_ t<00><00>|_ t<00><00>|_t!<00><00>|_t%<00><00>|_t)<00><00>|_t-<00><00>|_t1<00><00>|_dS<00>N)r
r <00> LOG_LEVEL<45>LOG_FILE<4C>logging<6E> getLogger<65>__name__<5F>loggerr <00>
llm_clientr<00>knowledge_managerr<00>dialogue_managerr<00>analytics_managerr<00> alert_systemr<00>monitor_servicer<00> token_monitorr<00>ai_success_monitorr<00>system_optimizer)<01>selfs <20>D:\code\assist\src\main.py<70>__init__zTSPAssistant.__init__s<><00><00><15>f<EFBFBD>&<26><06><0F>8<>8<>8<><1D>'<27><08>1<>1<><04> <0B>%<25>,<2C>,<2C><04><0F>!1<>!3<>!3<><04><1E> /<2F> 1<> 1<><04><1D>!1<>!3<>!3<><04><1E>'<27>M<EFBFBD>M<EFBFBD><04><19>-<2D>/<2F>/<2F><04><1C>)<29>^<5E>^<5E><04><1A>"2<>"4<>"4<><04><1F> /<2F> 1<> 1<><04><1D><1D><1D><00>returnc<00><><00>ddddd<02>} tj<00><00>r d|d<|j<00>d<05><00>n|j<00>d<06><00>|j<00><00><00>r d|d<|j<00>d<08><00>n|j<00>d <09><00>|j<00><00><00>}|r d|d
<|j<00>d <0B><00>n|j<00>d <0C><00>t|d|dg<02><00>|d <n4#t$r'}|j<00>d|<03><00><02><00>Yd}~nd}~wwxYw|S)u测试系统各个组件F)<04>database<73>llm_api<70>knowledge_base<73>overallTr0u数据库连接测试成功u数据库连接测试失败r1uLLM API连接测试成功uLLM API连接测试失败r2u知识库测试成功u知识库为空或测试失败r3u系统测试失败: N) r <00>test_connectionr <00>info<66>errorr!r"<00>get_knowledge_stats<74>warning<6E>all<6C> Exception)r*<00>results<74>knowledge_stats<74>es r+<00> test_systemzTSPAssistant.test_system,s<><00><00><1E><1C>#<23><1C> 
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD><07> :<3A><19>)<29>+<2B>+<2B> A<01>&*<2A><07>
<EFBFBD>#<23><14> <0B> <20> <20>!><3E>?<3F>?<3F>?<3F>?<3F><14> <0B>!<21>!<21>"?<3F>@<40>@<40>@<40><14><EFBFBD>.<2E>.<2E>0<>0<> ?<3F>%)<29><07> <09>"<22><14> <0B> <20> <20>!<<3C>=<3D>=<3D>=<3D>=<3D><14> <0B>!<21>!<21>"=<3D>><3E>><3E>><3E>#<23>4<>H<>H<>J<>J<>O<EFBFBD><1E> F<01>,0<><07>(<28>)<29><14> <0B> <20> <20>!8<>9<>9<>9<>9<><14> <0B>#<23>#<23>$D<>E<>E<>E<>"%<25>g<EFBFBD>j<EFBFBD>&9<>7<EFBFBD>9<EFBFBD>;M<>%N<>!O<>!O<>G<EFBFBD>I<EFBFBD> <1E> <1E><><18> :<3A> :<3A> :<3A> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<> 9<> 9<> 9<> 9<> 9<><39><EFBFBD><EFBFBD><EFBFBD> :<3A><><EFBFBD><EFBFBD><17>s<00>DD<00>
E<03>)E <03> EN<>message<67>user_id<69> work_order_idc<00> <00> |j<00>|||<03><01><00>}d|vr#|j<00>d|d<00><00><02><00>|S#t$r;}|j<00>d|<05><00><02><00>ddt |<05><00><00><00>icYd}~Sd}~wwxYw)u处理用户消息)<03> user_messager@rAr6u处理消息失败: u处理消息异常: u处理异常: N)r#<00>process_user_messager r6r:<00>str)r*r?r@rA<00>resultr=s r+<00>process_messagezTSPAssistant.process_messageTs<><00><00> 8<><19>*<2A>?<3F>?<3F>$<24><1F>+<2B>@<01><0E><0E>F<EFBFBD> <17>&<26> <20> <20><14> <0B>!<21>!<21>"J<><16><07><1F>"J<>"J<>K<>K<>K<><19>M<EFBFBD><4D><18> 8<> 8<> 8<> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<><1B>6<>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>6<>6<>7<> 7<> 7<> 7<> 7<> 7<> 7<><37><EFBFBD><EFBFBD><EFBFBD> 8<><38><EFBFBD>s<00>AA<00>
B <03>0B<03>B <03>B <03>medium<75>title<6C> description<6F>category<72>priorityc<00>"<00> |j<00>||||<04><01><00>}d|vr#|j<00>d|d<00><00><02><00>|S#t$r;}|j<00>d|<06><00><02><00>ddt |<06><00><00><00>icYd}~Sd}~wwxYw)u 创建工单<E5B7A5>rIrJrKrLr6u创建工单失败: u创建工单异常: <20>创建异常: N)r#<00>create_work_orderr r6r:rE)r*rIrJrKrLrFr=s r+rPzTSPAssistant.create_work_orderfs<><00><00> 8<><19>*<2A><<3C><<3C><1B>'<27>!<21>!<21> =<3D><0E><0E>F<EFBFBD><17>&<26> <20> <20><14> <0B>!<21>!<21>"J<><16><07><1F>"J<>"J<>K<>K<>K<><19>M<EFBFBD><4D><18> 8<> 8<> 8<> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<><1B>6<>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>6<>6<>7<> 7<> 7<> 7<> 7<> 7<> 7<><37><EFBFBD><EFBFBD><EFBFBD> 8<><38><EFBFBD>s<00>AA <00>
B<03>0B <03>B<03> Bc <00><><00> |jj|fi|<02><01>S#t$r(}|j<00>d|<03><00><02><00>Yd}~dSd}~wwxYw)u 更新工单u更新工单异常: NF)r#<00>update_work_orderr:r r6)r*rA<00>kwargsr=s r+rRzTSPAssistant.update_work_orderysp<00><00> <19>:<3A>4<EFBFBD>(<28>:<3A>=<3D>S<>S<>F<EFBFBD>S<>S<> S<><53><18> <19> <19> <19> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>s<00><00>
A<03>A<03>A<03><00>query<72>top_kc<00><><00> |j<00>||<02><00>}|t|<03><00>d<01>S#t$r;}|j<00>d|<04><00><02><00>ddt |<04><00><00><00>icYd}~Sd}~wwxYw)u搜索知识库)r;<00>countu搜索知识库异常: r6u搜索异常: N)r"<00>search_knowledge<67>lenr:r r6rE)r*rUrVr;r=s r+rYzTSPAssistant.search_knowledge<67>s<><00><00> 8<><1A>,<2C>=<3D>=<3D>e<EFBFBD>U<EFBFBD>K<>K<>G<EFBFBD>"<22><1C>W<EFBFBD><1C><1C><0E><0E> <0E><><19> 8<> 8<> 8<> <10>K<EFBFBD> <1D> <1D>;<3B><01>;<3B>;<3B> <<3C> <<3C> <<3C><1B>6<>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>6<>6<>7<> 7<> 7<> 7<> 7<> 7<> 7<><37><EFBFBD><EFBFBD><EFBFBD> 8<><38><EFBFBD>s<00>,/<00>
A4<03>0A/<03>)A4<03>/A4<03><00>?<3F>question<6F>answer<65>confidence_scorec<00><><00> |j<00>||||<04><00>S#t$r(}|j<00>d|<05><00><02><00>Yd}~dSd}~wwxYw)u添加知识库条目u添加知识库异常: NF)r"<00>add_knowledge_entryr:r r6)r*r\r]rKr^r=s r+<00> add_knowledgezTSPAssistant.add_knowledge<67>sq<00><00> <19><17>)<29>=<3D>=<3D>h<EFBFBD><06>PX<50>Zj<5A>k<>k<> k<><6B><18> <19> <19> <19> <10>K<EFBFBD> <1D> <1D>;<3B><01>;<3B>;<3B> <<3C> <<3C> <<3C><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>s<00><00>
2025-09-06 21:06:18 +08:00
A<03>A <03> A<03>today<61>
date_rangec<00><><00> ddlm}||<01><00>\}}g}|}||krL|j<00>|<06><00>}d|vr|<05>|<07><00>|t d<04><05><00>z }||k<00>L|j<00>||z
jdz<00><00>}|<03>d|<04><00>||d<07>S#t$r;} |j <00>
d| <09><00><02><00>dd t| <09><00><00><00>icYd
} ~ Sd
} ~ wwxYw) u生成分析报告r)<01>parse_date_ranger6<00>)<01>daysu 到 )<03>period<6F>daily_analytics<63>summaryu生成分析报告异常: u生成异常: N) <0C>src.utils.helpersrer$<00>generate_daily_analytics<63>appendr<00>get_analytics_summaryrgr:r r6rE)
r*rcre<00>
start_date<EFBFBD>end_date<74>analytics_results<74> current_daterFrjr=s
r+<00>generate_analyticszTSPAssistant.generate_analytics<63>sT<00><00> 8<> :<3A> :<3A> :<3A> :<3A> :<3A> :<3A>#3<>#3<>J<EFBFBD>#?<3F>#?<3F> <20>J<EFBFBD><08>!#<23> <1D>%<25>L<EFBFBD><1E>(<28>*<2A>*<2A><1D>/<2F>H<>H<><1C>V<>V<><06><1A>&<26>(<28>(<28>%<25>,<2C>,<2C>V<EFBFBD>4<>4<>4<><1C> <09>q<EFBFBD> 1<> 1<> 1<>1<> <0C> <1F>(<28>*<2A>*<2A><1B>,<2C>B<>B<>H<EFBFBD>z<EFBFBD>DY<44>C_<43>bc<62>Cc<43>d<>d<>G<EFBFBD>(<28>8<>8<>h<EFBFBD>8<>8<>#4<>"<22><0E><0E> <0E><> <19> 8<> 8<> 8<> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><1B>6<>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>6<>6<>7<> 7<> 7<> 7<> 7<> 7<> 7<><37><EFBFBD><EFBFBD><EFBFBD> 8<><38><EFBFBD>s<00>BB<00>
C!<03>&0C<03>C!<03>C!c<00><><00> |j<00><00><00>}|t|<01><00>d<01>S#t$r;}|j<00>d|<02><00><02><00>ddt |<02><00><00><00>icYd}~Sd}~wwxYw)u获取预警信息)<02> active_alertsrXu获取预警异常: r6u获取异常: N)r$<00>get_active_alertsrZr:r r6rE)r*rur=s r+<00>
get_alertszTSPAssistant.get_alerts<74>s<><00><00> 8<> <20>2<>D<>D<>F<>F<>M<EFBFBD>!.<2E><1C>]<5D>+<2B>+<2B><0E><0E> <0E><><19> 8<> 8<> 8<> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<><1B>6<>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>6<>6<>7<> 7<> 7<> 7<> 7<> 7<> 7<><37><EFBFBD><EFBFBD><EFBFBD> 8<><38><EFBFBD>s<00>*-<00>
2025-09-06 21:06:18 +08:00
A2<03>0A-<03>'A2<03>-A2c <00>6<00> ddlm}|<00><00><00>}|j<00><00><00>}|<01><00>}|j<00><00><00>}|j<00><00><00>}|||t|<05><00>|<06>
dd<01><00>|<06>
dd<05><00>tj <00><00><00> <00><00>d<06>S#t$r;}|j<00>d|<07><00><02><00>dd t#|<07><00><00><00>icYd
}~Sd
}~wwxYw) u获取系统状态r)<01>get_memory_usage<67> health_score<72>status<75>unknown)<07> system_statusr2<00> memory_usagerurz<00> health_status<75> timestampu获取系统状态异常: r6u获取状态异常: N)rkryr>r"r7r%rvr&<00>get_system_healthrZ<00>getr<00>now<6F> isoformatr:r r6rE)r*ry<00> test_resultsr<r~<00>alertsrr=s r+<00>get_system_statuszTSPAssistant.get_system_status<75>sE<00><00> ><3E> :<3A> :<3A> :<3A> :<3A> :<3A> :<3A> <20>+<2B>+<2B>-<2D>-<2D>L<EFBFBD>#<23>4<>H<>H<>J<>J<>O<EFBFBD>,<2C>+<2B>-<2D>-<2D>L<EFBFBD><1A>&<26>8<>8<>:<3A>:<3A>F<EFBFBD>!<21>0<>B<>B<>D<>D<>M<EFBFBD>".<2E>"1<> ,<2C>!$<24>V<EFBFBD><1B><1B> -<2D> 1<> 1<>.<2E>!<21> D<> D<>!.<2E>!2<>!2<>8<EFBFBD>Y<EFBFBD>!G<>!G<>%<25>\<5C>^<5E>^<5E>5<>5<>7<>7<><0E><0E> <0E><><19> ><3E> ><3E> ><3E> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><1B><<3C>C<EFBFBD><01>F<EFBFBD>F<EFBFBD><<3C><<3C>=<3D> =<3D> =<3D> =<3D> =<3D> =<3D> =<3D><><EFBFBD><EFBFBD><EFBFBD> ><3E><><EFBFBD>s<00>CC<00>
D<03>0D<03> D<03>Dc<00><><00> |j<00><00><00>|j<00>d<01><00>dS#t$r(}|j<00>d|<01><00><02><00>Yd}~dSd}~wwxYw)u启动监控服务u监控服务已启动Tu启动监控服务失败: NF)r&<00>startr r5r:r6<00>r*r=s r+<00>start_monitoringzTSPAssistant.start_monitoring<6E>s<><00><00> <19> <10> <20> &<26> &<26> (<28> (<28> (<28> <10>K<EFBFBD> <1C> <1C>4<> 5<> 5<> 5<><17>4<EFBFBD><34><18> <19> <19> <19> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD><EFBFBD><00>37<00>
A)<03>A$<03>$A)c<00><><00> |j<00><00><00>|j<00>d<01><00>dS#t$r(}|j<00>d|<01><00><02><00>Yd}~dSd}~wwxYw)u停止监控服务u监控服务已停止Tu停止监控服务失败: NF)r&<00>stopr r5r:r6r<>s r+<00>stop_monitoringzTSPAssistant.stop_monitoring<6E>s<><00><00> <19> <10> <20> %<25> %<25> '<27> '<27> '<27> <10>K<EFBFBD> <1C> <1C>4<> 5<> 5<> 5<><17>4<EFBFBD><34><18> <19> <19> <19> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>r<EFBFBD>c<00><><00> |j<00><00><00>S#t$r)}|j<00>d|<01><00><02><00>gcYd}~Sd}~wwxYw)u 检查预警u检查预警失败: N)r%<00>check_all_rulesr:r r6r<>s r+<00> check_alertszTSPAssistant.check_alerts<74>si<00><00> <16><17>$<24>4<>4<>6<>6<> 6<><36><18> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD><EFBFBD><00><00>
A<03>A <03>A<03> Ac<00><><00> |j<00><00><00>S#t$r)}|j<00>d|<01><00><02><00>gcYd}~Sd}~wwxYw)u获取活跃预警u获取活跃预警失败: N)r%rvr:r r6r<>s r+rvzTSPAssistant.get_active_alerts<74>si<00><00> <16><17>$<24>6<>6<>8<>8<> 8<><38><18> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>r<EFBFBD><00>
2025-09-08 15:27:22 +08:00
alert_type<EFBFBD>levelc
<00>l<00> ddlm}ddlm}ddlm}|j<00><00>5}|d|j<00><00><00>d<07><00><00><00>|||<02>d|<03><00>d |j<00><00><00>
<EFBFBD><00>} |<08>| <09><00>|<08> <00><00>|j
<00> d |<02><00><02><00>| j ||||| j <00><00><00>d <0C>cd d d <0A><00>S#1swxYwYd S#t$r;}
|j
<00>d|
<EFBFBD><00><02><00>ddt#|
<EFBFBD><00><00><00>icYd }
~
Sd }
~
wwxYw)u 创建预警<E9A284>r )<01>Alertr)ru 手动预警_z %Y%m%d_%H%M%Sz: T)<06> rule_namer<65>r<>r?<00> is_active<76>
created_atu创建预警成功: )<06>idrIrJr<>r<>r<>Nu创建预警异常: r6rO)<12> core.databaser <00> core.modelsr<73>r<00> get_sessionr<6E><00>strftime<6D>add<64>commitr r5r<>r<>r<>r:r6rE) r*r<>rIrJr<>r r<>r<00>session<6F>alertr=s r+<00> create_alertzTSPAssistant.create_alerts<><00><00> 8<> 2<> 2<> 2<> 2<> 2<> 2<> +<2B> +<2B> +<2B> +<2B> +<2B> +<2B> )<29> )<29> )<29> )<29> )<29> )<29>'<27><1A>'<27>)<29>)<29> <12>W<EFBFBD><1D><05>X<>l<EFBFBD>h<EFBFBD>l<EFBFBD>n<EFBFBD>n<EFBFBD>.E<>.E<>o<EFBFBD>.V<>.V<>X<>X<>)<29><1F>$<24>5<>5<> <0B>5<>5<>"<22>+<2B>x<EFBFBD>|<7C>~<7E>~<7E> <12><12><12><05><18> <0B> <0B>E<EFBFBD>"<22>"<22>"<22><17><0E><0E> <20> <20> <20><14> <0B> <20> <20>!?<3F><05>!?<3F>!?<3F>@<40>@<40>@<40><1F>(<28>"<22>#.<2E>"<22>",<2C>"'<27>"2<>"<<3C>"<<3C>"><3E>"><3E> <12><12> <12> <12> <12> <12> <12> <12> <12> <12> <12> <12> <12> <12><><EFBFBD><EFBFBD> <12> <12> <12> <12> <12> <12><>,<19> 8<> 8<> 8<> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<><1B>6<>c<EFBFBD>!<21>f<EFBFBD>f<EFBFBD>6<>6<>7<> 7<> 7<> 7<> 7<> 7<> 7<><37><EFBFBD><EFBFBD><EFBFBD> 8<><38><EFBFBD>sA<00>!C.<00>B1C!<03> C.<00>!C%<07>%C.<00>(C%<07>)C.<00>.
D3<03>80D.<03>(D3<03>.D3<03>alert_idc<00><><00> |j<00>|<01><00>S#t$r(}|j<00>d|<02><00><02><00>Yd}~dSd}~wwxYw)u 解决预警u解决预警失败: NF)r%<00> resolve_alertr:r r6)r*r<>r=s r+r<>zTSPAssistant.resolve_alert%si<00><00> <19><17>$<24>2<>2<>8<EFBFBD><<3C><<3C> <<3C><><18> <19> <19> <19> <10>K<EFBFBD> <1D> <1D>8<>Q<EFBFBD>8<>8<> 9<> 9<> 9<><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD><EFBFBD><00><00>
A<03>A <03> Ac<00><><00> |j<00><00><00>S#t$r)}|j<00>d|<01><00><02><00>icYd}~Sd}~wwxYw)u获取预警统计u获取预警统计失败: N)r%<00>get_alert_statisticsr:r r6r<>s r+r<>z!TSPAssistant.get_alert_statistics-si<00><00> <16><17>$<24>9<>9<>;<3B>;<3B> ;<3B><><18> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>r<EFBFBD><00>d<00>limitc<00><><00> tj<00><00>5}|<02>t<00><00><00>tj<00><00><00><00><00>}|r|<03>|<01><00>}|<03><00><00>}g}|D]<5D>}|<05> |j
|j |j |j |j|j|j|jr|j<00><00><00>nd|jr|j<00><00><00>nd|j|jd<02> <0B><00><00><>|cddd<01><00>S#1swxYwYdS#t*$r)}|j<00>d|<07><00><02><00>gcYd}~Sd}~wwxYw)u6获取最近的工单列表按创建时间倒序N) r<><00>order_idrIrJrKrLr{r<><00>
updated_at<EFBFBD>
resolution<EFBFBD>satisfaction_scoreu获取工单列表失败: )r r<>rUr<00>order_byr<79><00>descr<63>r9rmr<>r<>rIrJrKrLr{r<>r<>r<>r<>r:r r6)r*r<>r<><00>q<>rowsr;<00>wr=s r+<00>get_workorderszTSPAssistant.get_workorders5s<><00><00> <16><1B>'<27>)<29>)<29> <1F>W<EFBFBD><1B>M<EFBFBD>M<EFBFBD>)<29>,<2C>,<2C>5<>5<>i<EFBFBD>6J<36>6O<36>6O<36>6Q<36>6Q<36>R<>R<><01><18>'<27><19><07><07><05><0E><0E>A<EFBFBD><18>u<EFBFBD>u<EFBFBD>w<EFBFBD>w<EFBFBD><04>02<30><07><1D> <17> <17>A<EFBFBD><1B>N<EFBFBD>N<EFBFBD><1F>d<EFBFBD>$%<25>J<EFBFBD>!"<22><17>'(<28>}<7D>$%<25>J<EFBFBD>$%<25>J<EFBFBD>"#<23>(<28>BC<42>,<2C>&X<>a<EFBFBD>l<EFBFBD>&<<3C>&<<3C>&><3E>&><3E>&><3E>TX<54>BC<42>,<2C>&X<>a<EFBFBD>l<EFBFBD>&<<3C>&<<3C>&><3E>&><3E>&><3E>TX<54>&'<27>l<EFBFBD>./<2F>.B<> $<16> $<16> <17> <17> <17> <17><1F>) <1F> <1F> <1F> <1F> <1F> <1F> <1F> <1F> <1F> <1F> <1F> <1F><><EFBFBD><EFBFBD> <1F> <1F> <1F> <1F> <1F> <1F><>*<19> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>sA<00>D:<00>D D-<03> D:<00>-D1<07>1D:<00>4D1<07>5D:<00>:
E-<03>E(<03>"E-<03>(E-c<00><><00> |j<00><00><00>S#t$r;}|j<00>d|<01><00><02><00>ddt |<01><00><00><00>icYd}~Sd}~wwxYw)u获取系统健康状态u 获取系统健康状态失败: r6u获取健康状态失败: N)r&r<>r:r r6rEr<>s r+r<>zTSPAssistant.get_system_healthQs<><00><00> D<01><17>'<27>9<>9<>;<3B>;<3B> ;<3B><><18> D<01> D<01> D<01> <10>K<EFBFBD> <1D> <1D>D<><11>D<>D<> E<> E<> E<><1B>B<>#<23>a<EFBFBD>&<26>&<26>B<>B<>C<> C<> C<> C<> C<> C<> C<><43><EFBFBD><EFBFBD><EFBFBD> D<01><><EFBFBD>s<00><00>
A <03>0A<03>A <03>A <03>rgc<00><00> |r|j<00>||<02><00>S|j<00>|<02><00>S#t$r;}|j<00>d|<03><00><02><00>ddt |<03><00><00><00>icYd}~Sd}~wwxYw)u获取Token使用统计u获取Token使用统计失败: r6u获取Token统计失败: N)r'<00>get_user_token_stats<74>get_system_token_statsr:r r6rE)r*r@rgr=s r+<00>get_token_usage_statsz"TSPAssistant.get_token_usage_statsYs<><00><00> C<01><16> G<01><1B>)<29>><3E>><3E>w<EFBFBD><04>M<>M<>M<><1B>)<29>@<40>@<40><14>F<>F<>F<><46><18> C<01> C<01> C<01> <10>K<EFBFBD> <1D> <1D>C<><01>C<>C<> D<> D<> D<><1B>A<><13>Q<EFBFBD><16><16>A<>A<>B<> B<> B<> B<> B<> B<> B<><42><EFBFBD><EFBFBD><EFBFBD> C<01><><EFBFBD><EFBFBD><00>9<00>9<00>
A><03>0A9<03>3A><03>9A><03><00>
model_name<EFBFBD>hoursc<00><00> |r|j<00>||<02><00>S|j<00>|<02><00>S#t$r;}|j<00>d|<03><00><02><00>ddt |<03><00><00><00>icYd}~Sd}~wwxYw)u获取AI性能统计u获取AI性能统计失败: r6N)r(<00>get_model_performance<63>get_system_performancer:r r6rE)r*r<>r<>r=s r+<00>get_ai_performance_statsz%TSPAssistant.get_ai_performance_statsds<><00><00> F<01><19> M<01><1B>.<2E>D<>D<>Z<EFBFBD>QV<51>W<>W<>W<><1B>.<2E>E<>E<>e<EFBFBD>L<>L<>L<><4C><18> F<01> F<01> F<01> <10>K<EFBFBD> <1D> <1D>@<40>Q<EFBFBD>@<40>@<40> A<> A<> A<><1B>D<>C<EFBFBD><01>F<EFBFBD>F<EFBFBD>D<>D<>E<> E<> E<> E<> E<> E<> E<><45><EFBFBD><EFBFBD><EFBFBD> F<01><><EFBFBD>r<EFBFBD><00>c<00><><00> |j<00>|<01><00>S#t$r)}|j<00>d|<02><00><02><00>gcYd}~Sd}~wwxYw)u获取成本趋势u获取成本趋势失败: N)r'<00>get_cost_trendr:r r6<00>r*rgr=s r+r<>zTSPAssistant.get_cost_trendosk<00><00> <16><17>%<25>4<>4<>T<EFBFBD>:<3A>:<3A> :<3A><><18> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD><EFBFBD><00><00>
A<03>A
<03>A<03>
Ac<00><><00> |j<00>|<01><00>S#t$r)}|j<00>d|<02><00><02><00>gcYd}~Sd}~wwxYw)u获取性能趋势u获取性能趋势失败: N)r(<00>get_performance_trendr:r r6r<>s r+r<>z"TSPAssistant.get_performance_trendwsk<00><00> <16><17>*<2A>@<40>@<40><14>F<>F<> F<><46><18> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>r<EFBFBD><00>
r<00>offsetc<00><><00> |j<00>||||<04><01><00>S#t$r)}|j<00>d|<05><00><02><00>gcYd}~Sd}~wwxYw)u获取用户对话历史)r@rAr<>r<>u 获取用户对话历史失败: N)r#<00>get_user_conversation_historyr:r r6)r*r@rAr<>r<>r=s r+r<>z*TSPAssistant.get_user_conversation_historys<><00><00> <16><17>(<28>F<>F<><1F>+<2B><1B><1D> G<01><0E><0E> <0E><> <19> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>D<><11>D<>D<> E<> E<> E<><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>s<00> <00>
A<03>A<03>A<03>A<03>conversation_idc<00><><00> |j<00>|<01><00>S#t$r(}|j<00>d|<02><00><02><00>Yd}~dSd}~wwxYw)u删除对话记录u删除对话记录失败: NF)r#<00>delete_conversationr:r r6)r*r<>r=s r+r<>z TSPAssistant.delete_conversation<6F>si<00><00> <19><17>(<28><<3C><<3C>_<EFBFBD>M<>M<> M<><4D><18> <19> <19> <19> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><18>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD>5<EFBFBD><35><EFBFBD><EFBFBD><EFBFBD> <19><><EFBFBD>r<EFBFBD>c<00><><00> |j<00>||<02><00>S#t$r(}|j<00>d|<03><00><02><00>Yd}~dSd}~wwxYw)u!删除用户的所有对话记录u 删除用户对话记录失败: Nr)r#<00>delete_user_conversationsr:r r6)r*r@rAr=s r+r<>z&TSPAssistant.delete_user_conversations<6E>sk<00><00> <15><17>(<28>B<>B<>7<EFBFBD>M<EFBFBD>Z<>Z<> Z<><5A><18> <15> <15> <15> <10>K<EFBFBD> <1D> <1D>D<><11>D<>D<> E<> E<> E<><14>1<EFBFBD>1<EFBFBD>1<EFBFBD>1<EFBFBD>1<EFBFBD><31><EFBFBD><EFBFBD><EFBFBD> <15><><EFBFBD>s<00><00>
A<03>A
<03>
Ac<00>v<00> i}|jj<00>|<01><00>}||d<|j<00>|<01><00>}||d<|j<00>|<01><00>}||d<|j<00>d|<02><00><02><00>|S#t$r)}|j<00> d|<06><00><02><00>icYd}~Sd}~wwxYw)u清理旧数据<E695B0> conversations<6E>
token_data<EFBFBD>ai_datau数据清理完成: u清理旧数据失败: N)
r#<00>history_manager<65>cleanup_old_conversationsr'<00>cleanup_old_datar(r r5r:r6)r*rgr;<00>conversation_cleaned<65> token_cleaned<65>
ai_cleanedr=s r+r<>zTSPAssistant.cleanup_old_data<74>s<><00><00> <16><18>G<EFBFBD>$(<28>#8<>#H<>#b<>#b<>cg<63>#h<>#h<> <20>';<3B>G<EFBFBD>O<EFBFBD> $<24>!<21>.<2E>?<3F>?<3F><04>E<>E<>M<EFBFBD>$1<>G<EFBFBD>L<EFBFBD> !<21><1E>0<>A<>A<>$<24>G<>G<>J<EFBFBD>!+<2B>G<EFBFBD>I<EFBFBD> <1E> <10>K<EFBFBD> <1C> <1C>=<3D>G<EFBFBD>=<3D>=<3D> ><3E> ><3E> ><3E><1A>N<EFBFBD><4E><18> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>;<3B><01>;<3B>;<3B> <<3C> <<3C> <<3C><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>s<00>BB<00>
B8<03>B3<03>-B8<03>3B8c<00><><00> |j<00>|<01><00>S#t$r(}|j<00>d|<02><00><02><00>Yd}~dSd}~wwxYw)u检查用户请求频率限制u检查频率限制失败: NT)r)<00>check_rate_limitr:r r6)r*r@r=s r+r<>zTSPAssistant.check_rate_limit<69>si<00><00> <18><17>(<28>9<>9<>'<27>B<>B<> B<><42><18> <18> <18> <18> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><17>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD> <18><><EFBFBD>r<EFBFBD><00>
user_inputc<00><><00> |j<00>|<01><00>S#t$r,}|j<00>d|<02><00><02><00>ddd<04>cYd}~Sd}~wwxYw)u检查输入安全性u检查输入安全性失败: Tu安全检查异常)<02>is_safer?N)r)<00>check_input_securityr:r r6)r*r<>r=s r+r<>z!TSPAssistant.check_input_security<74>s<00><00> F<01><17>(<28>=<3D>=<3D>j<EFBFBD>I<>I<> I<><49><18> F<01> F<01> F<01> <10>K<EFBFBD> <1D> <1D>A<>a<EFBFBD>A<>A<> B<> B<> B<>#<23>0D<30>E<>E<> E<> E<> E<> E<> E<> E<><45><EFBFBD><EFBFBD><EFBFBD> F<01><><EFBFBD>s<00><00>
A<03>!A <03>A<03> A<03>estimated_costc<00><><00> |j<00>|<01><00>S#t$r(}|j<00>d|<02><00><02><00>Yd}~dSd}~wwxYw)u检查成本限制u检查成本限制失败: NT)r)<00>check_cost_limitr:r r6)r*r<>r=s r+r<>zTSPAssistant.check_cost_limit<69>si<00><00> <18><17>(<28>9<>9<>.<2E>I<>I<> I<><49><18> <18> <18> <18> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><17>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD>4<EFBFBD><34><EFBFBD><EFBFBD><EFBFBD> <18><><EFBFBD>r<EFBFBD>c<00><><00> |j<00><00><00>S#t$r9}|j<00>d|<01><00><02><00>dt |<01><00>d<03>cYd}~Sd}~wwxYw)u获取系统优化状态u 获取系统优化状态失败: r6)r{r?N)r)r<>r:r r6rEr<>s r+<00>get_system_optimization_statusz+TSPAssistant.get_system_optimization_status<75>s}<00><00> :<3A><17>(<28>:<3A>:<3A><<3C><<3C> <<3C><><18> :<3A> :<3A> :<3A> <10>K<EFBFBD> <1D> <1D>D<><11>D<>D<> E<> E<> E<>%<25>#<23>a<EFBFBD>&<26>&<26>9<>9<> 9<> 9<> 9<> 9<> 9<> 9<><39><EFBFBD><EFBFBD><EFBFBD> :<3A><><EFBFBD>s<00><00>
A<03>.A<03>A<03>A<03> response_timec<00><><00> |j<00>|<01><00>S#t$r)}|j<00>d|<02><00><02><00>icYd}~Sd}~wwxYw)u优化响应时间u优化响应时间失败: N)r)<00>optimize_response_timer:r r6)r*r<>r=s r+r<>z#TSPAssistant.optimize_response_time<6D>sk<00><00> <16><17>(<28>?<3F>?<3F> <0A>N<>N<> N<><4E><18> <16> <16> <16> <10>K<EFBFBD> <1D> <1D>><3E>1<EFBFBD>><3E>><3E> ?<3F> ?<3F> ?<3F><15>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD>I<EFBFBD><49><EFBFBD><EFBFBD><EFBFBD> <16><><EFBFBD>r<EFBFBD>)NN)rH)rT)r[)rb)r<>)Nr<4E>)Nr<4E>)r<>)r<>)Nr<4E>rr),r<00>
__module__<EFBFBD> __qualname__<5F>__doc__r,rrErr><00>intrGrP<00>boolrRrY<00>floatrarsrwr<>r<>r<>rr<>rvr<>r<>r<>r<>r<>r<>r<>r<>r<>rr<>r<>r<>r<>r<>r<>r<>r<>r<><00>r-r+rrs<><00><00><00><00><00><00><19><19>2<>2<>2<>"&<17>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>&<17>&<17>&<17>&<17>P8<>8<>s<EFBFBD>8<>S<EFBFBD>8<>PS<50>8<>_c<5F>dg<64>il<69>dl<64>_m<5F>8<>8<>8<>8<>$8<>8<>s<EFBFBD>8<><13>8<><03>8<>WZ<57>8<>jn<6A>or<6F>tw<74>ow<6F>jx<6A>8<>8<>8<>8<>&<19>s<EFBFBD><19><14><19><19><19><19>
2025-09-06 21:06:18 +08:00
8<>
8<>c<EFBFBD>
8<>#<23>
8<>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD>
8<>
8<>
8<>
8<><19><19>c<EFBFBD><19>3<EFBFBD><19>#<23><19>Y^<5E><19>im<69><19><19><19><19>8<>8<>S<EFBFBD>8<>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>8<>8<>8<>8<>:
8<>D<EFBFBD><13>c<EFBFBD><18>N<EFBFBD>
8<>
8<>
8<>
8<> ><3E>4<EFBFBD><03>S<EFBFBD><08>><3E> ><3E> ><3E> ><3E> ><3E>D<19><19><19><19><19><19><16>d<EFBFBD>4<EFBFBD><03>S<EFBFBD><08>><3E>2<><16><16><16><16><16>4<EFBFBD><04>S<EFBFBD>#<23>X<EFBFBD><0E>#7<><16><16><16><16>8<>8<>s<EFBFBD>8<>3<EFBFBD>8<>S<EFBFBD>8<>QT<51>8<>dh<64>il<69>nq<6E>iq<69>dr<64>8<>8<>8<>8<>B<19>c<EFBFBD><19>d<EFBFBD><19><19><19><19><16>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD><16><16><16><16><16><16>C<EFBFBD><16>$<24>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>2F<32><16><16><16><16>8D<01>4<EFBFBD><03>S<EFBFBD><08>><3E>D<01>D<01>D<01>D<01> C<01> C<01>S<EFBFBD> C<01>s<EFBFBD> C<01>4<EFBFBD>PS<50>UX<55>PX<50>><3E> C<01> C<01> C<01> C<01> F<01> F<01>3<EFBFBD> F<01>c<EFBFBD> F<01>SW<53>X[<5B>]`<60>X`<60>Sa<53> F<01> F<01> F<01> F<01><16><16>3<EFBFBD><16><04>T<EFBFBD>#<23>s<EFBFBD>(<28>^<5E>0D<30><16><16><16><16><16><16>#<23><16>d<EFBFBD>4<EFBFBD><03>S<EFBFBD><08>><3E>6J<36><16><16><16><16>(,<2C><17><17> <16><16><14><16> <20><03>}<7D><16><13> <16>
<14> <16>
<0E>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD> <1D> <16><16><16><16>&<19>3<EFBFBD><19>4<EFBFBD><19><19><19><19><15><15><13><15>X<EFBFBD>c<EFBFBD>]<5D><15>^a<><15><15><15><15><16><16>S<EFBFBD><16>$<24>s<EFBFBD>C<EFBFBD>x<EFBFBD>.<2E><16><16><16><16>0<18><03><18><04><18><18><18><18>F<01>s<EFBFBD>F<01>t<EFBFBD>C<EFBFBD><13>H<EFBFBD>~<7E>F<01>F<01>F<01>F<01><18>u<EFBFBD><18><14><18><18><18><18>:<3A><04>S<EFBFBD>#<23>X<EFBFBD><0E>:<3A>:<3A>:<3A>:<3A><16>E<EFBFBD><16>d<EFBFBD>3<EFBFBD><03>8<EFBFBD>n<EFBFBD><16><16><16><16><16>r-rc<00><><00>t<00><00>}|<00><00><00>}td|<01><00>|dstd<03><00>dStd<05><00>|<00>dddd <09>
<EFBFBD><00>}td |<02><00>d |vr-|<00>d |d <00><0E><00>}td|<03><00>|<00><00><00>}td|<04><00>dS)u 主函数u系统测试结果:r3u'系统初始化失败请检查配置NuTSP助手启动成功u 测试工单u这是一个测试工单u 技术问题rHrNu 创建工单:rAu我的账户无法登录)r?rAu 处理消息:u 系统状态:)rr><00>printrPrGr<>)<05> assistantr<74><00>
work_order<EFBFBD>responser{s r+<00>mainr<6E><00>s<00><00><1D><0E><0E>I<EFBFBD><1D>(<28>(<28>*<2A>*<2A>L<EFBFBD> <09>
2025-09-06 21:06:18 +08:00
<1F><1C>.<2E>.<2E>.<2E> <17> <09> "<22><0F> <0A>7<>8<>8<>8<><0E><06> <09>
$<24>%<25>%<25>%<25><1B>,<2C>,<2C><1C>.<2E><1F><19> -<2D><06><06>J<EFBFBD> 
<EFBFBD>/<2F>:<3A>&<26>&<26>&<26><17>*<2A>$<24>$<24><1C>,<2C>,<2C>.<2E>$<24>_<EFBFBD>5<>-<2D>
<EFBFBD>
<EFBFBD><08> <0E>o<EFBFBD>x<EFBFBD>(<28>(<28>(<28><17> (<28> (<28> *<2A> *<2A>F<EFBFBD> <09>/<2F>6<EFBFBD>"<22>"<22>"<22>"<22>"r-<00>__main__),r<00>sys<79>os<6F>typingrrrrrr<00>pathrm<00>dirname<6D>abspath<74>__file__<5F>src.config.configr rkr
<00>src.core.databaser <00>src.core.llm_clientr <00>$src.knowledge_base.knowledge_managerr<00>src.dialogue.dialogue_managerr<00>src.analytics.analytics_managerr<00>src.analytics.alert_systemr<00>src.analytics.monitor_servicer<00>src.analytics.token_monitorr<00> src.analytics.ai_success_monitorr<00>src.core.system_optimizerr<00>src.core.modelsrrr<>rr<>r-r+<00><module>rs<><00><01><0E><0E><0E><0E>
2025-09-06 21:06:18 +08:00
<EFBFBD>
<EFBFBD>
<EFBFBD>
<EFBFBD> <09> <09> <09> <09>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>,<2C>(<28>(<28>(<28>(<28>(<28>(<28>(<28>(<28><04><08><0F><0F><02><07><0F><0F><02><07><0F><0F><02><07><0F><0F><08>0I<30>0I<30> J<> J<>K<>K<>L<>L<>L<>$<24>$<24>$<24>$<24>$<24>$<24>+<2B>+<2B>+<2B>+<2B>+<2B>+<2B>(<28>(<28>(<28>(<28>(<28>(<28>*<2A>*<2A>*<2A>*<2A>*<2A>*<2A>A<>A<>A<>A<>A<>A<>9<>9<>9<>9<>9<>9<><<3C><<3C><<3C><<3C><<3C><<3C>2<>2<>2<>2<>2<>2<>8<>8<>8<>8<>8<>8<>4<>4<>4<>4<>4<>4<>=<3D>=<3D>=<3D>=<3D>=<3D>=<3D>5<>5<>5<>5<>5<>5<>%<25>%<25>%<25>%<25>%<25>%<25>H<16>H<16>H<16>H<16>H<16>H<16>H<16>H<16>T##<23>##<23>##<23>J <0C>z<EFBFBD><19><19><08>D<EFBFBD>F<EFBFBD>F<EFBFBD>F<EFBFBD>F<EFBFBD>F<EFBFBD><1A>r-