From cae0e9d7f6ef2c9978c5cc119328838b80c37656 Mon Sep 17 00:00:00 2001 From: jinchao <383321154@qq.com> Date: Fri, 27 Jun 2025 08:56:21 +0800 Subject: [PATCH] =?UTF-8?q?V0.36.3.250627=5Falpha:=E4=B8=BAXNEngine?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E4=BA=86=E8=A7=84=E8=8C=83=E7=9A=84=E5=87=BA?= =?UTF-8?q?=E9=94=99=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Release/XNEngine | Bin 191528 -> 191480 bytes Release/database/LogInfo.db | Bin 81920 -> 86016 bytes Release/database/XNSim.db | Bin 1224704 -> 1224704 bytes XNCore/XNScenarioManager.cpp | 2 +- XNEngine/XNEngine.cpp | 60 +++++++++++++++++------------------ XNEngine/main.cpp | 27 ++++++++++++---- 6 files changed, 51 insertions(+), 38 deletions(-) diff --git a/Release/XNEngine b/Release/XNEngine index d42848ec1a7e6eca64c204310422a789019f0867..fb3cf42086ba43a8a3f88d67860c6f21dc4aff3e 100755 GIT binary patch delta 66368 zcmb@v3s_WD7dJjw1ZO+_>L|JL6748!StpYQ)X-#5>5*k`Y`_S$Q& zz4qE`UuIZ;taS)M1&Z=HLV)7GbQxUsCQGxpb;$A%slx+%O(NXJ)JZhU*cNs(2f zRhlmcHCiZ1@|%q&IfAUt)lF=VG;6E|@0rrr5(>T%hJt3s`Md)5*Dc-`A}z+V7>|r+ zDIWSP;|crw2L38|mg9K~&)azD^A1l8t3*o48iQe|VXYrvop^s=q#yX%<+Or4v9C zcl_xgL7euEo_LMJL!Vwq@5YlP^7kUW4^KalPZ256-jDbGcx-r5@eIV{|49@1bfkmu z48ik&fDzqLyk|=WhhaEgM&Wtb5BVtGM~nP8q~q~ChUalS6Y*%DC;Z+CHVOGB@l3|^ zG@hw=p2L%ehdwWe^hJ^8OX!Me$h;%~vyr}x$APB+j}s4lUKQzlqzmx8hR2P^gXeWT z^eINV1dohosemm*s^D3H=Pf*M94 zv<#K5%dJ|5$dxVEOErx4Bf?1M<=y6ZxScEbJ4cQR4lyMUgPD=#N*ll@UizI;e+s%# zc@y$6@~Pm#Qd3rknc)Vq_oa|8M0$(WQqn3EbdXf8Y?UDWEl+42BJCpX(oi|Eb-ZK* zWUw@bm3~&_t`R}Ec$^~sgrLPGmm$sQ9nFu4>+J;IlhRws<-Hf`9 zaXF{7den%j0iI0+OWNg1JqT}_?rU2h)8JlKUkEGp2jgGUEb8B<0=Xo7Tu4EBs5e$ z7P>slR>FI~b7O7vxDb9kbF7lv_m>^ztp!As-`k?~TMyf`u>teBh^ zK3Y`qTpFjTl6Oajgd0RhMRCT45ilb%$ExG<)yO!9=E)KPrcY0F7FD3{-wFLVyjZ8Q zS@9g6OWqWpiR`bz(5NY|rr;M2N7u7Y=M2Gr7K6*HIzD17o+aPvI4CheNE$9k7dPiD zY{xhY)Wkjt2uQ?A`T0(Rht%kX+ry}UwNLbkX1=>yh*AeQH;g{^ncJSjZHr~2B`!RV zcbRVxO-F}NWwyEU5X+!m2{fVL0~NE+t5Dl&(xw2{;2?Czfg!3uZjmf=193H%%>w10^nc=3W z5E#zEsIF2w`AU?0y7pM8#tVP5i?4#tZ%F4W_ji)Ha=AG=keB4H!iKXk#f7 zy%%L@Z&;AbOlx7sYB==`LV(4#3i#4}F82 zcvrk5SJ$6uW?r^fm;ub1ecB72HeFx*2X2{~k@p6du$ves%^u+JTwU|N58=(5!J8+a zysMQXPbc98&CTcr?s+@sY0$|W1;0Wv)KJudk2c0~F~$h4@Ap^WpGd{)?`0~M=UZEc ziqW8rq4z}Zz#Ob0VHOIJ@X>te$o`yhrF_a75*{qnuZ^V07>>2glv{U>3(wXKz;a=| z*)!!wJI5J=r^&B%j+08|?VaPpN_E=(9DPMCfOG5;0-CTc@kSe_t1fZT`i|?`ijyXM zz-0|=D!zFvHQcjHtc`QNKG2sE6kwLiRdqlZ4qtN^N|x)SE`x-h)h=YcL9UaFgnx7^Pa zlq(`1O+l}B5cG1NZV8E^8@dT*_lUu)H>~a=`m)WI-|RN1mqGNZP=moNqQ6p|_R^pS zn!ZYYms@v_3%BXa^_z4qN^YV2Xm<>*`SNSs<6^6HREn6a3v@j zL5KXNm#F!;JgY|+1jnm;baE63@mh-3{w-|6@Fs7_O=f$LDOK3kZyXLEz&=HTxic=Y zbHZZ+{+4j71`$!g1lcDJT~1wA!dukZHxEDFTp;9OJwrpq1gHZcwfl;`yf3Ck8v zMw9uVm>w(TO+7;#1v+DR6B8WO7_8Ib1hkYoqFmS_vg|VgRzdU@on}6ZCjHT(zNguIi3mf?)0n5&X9Z?|;#;gU z;%qC22kQ)L7bY&E*BfHzyEwd@w_k1=-zvN&pZB7e>kPFJl^Nv;xmSF=^qc%xeB1=R zY0efwuihA+AHXZn8)G%gpvre5#>L{p%Hj~FS! z{=wYbf_Xa(%h5U1fXZVW0GG->S8SY*ek@ED{EN9#y7|oT5cm?K0%7Ncg3)W>NCK70 zrxHRQ(T|SzFxaV-rHWUtjgFNF7N}IYuvkq6v0`Gc5>5k49rk%u9+ub%A>8wcAsJOV z`@1iS^9mNcv|ut;s6Rnx-ZEE;_b;t5)fRi*K6namTzB_Ug7A>%*5pc(ykF~|yZ#=Q?y53RI=vp5H| zfqm|X;Iu@((ks*ZHb;kG(bT#auB1 zX#Dq!(9t6JKf;R{3=4%@5<|;pL?aQSPz4sD)`x_kwb@hwX7t{?b;z>M!@^nCY(91O z5}Wu}ffEjSLTq{PPTNG(3(xeX4piG{D?b9Ioo%mftzN zMh7nuaZfG5<+m3%H(E}~A1;pTRU(Wiv}eN#iiM}M=-`%Va6`Lf#l1+~ARy zER7qIEsELoXyJdeb#SejIXZZ;M{c$(u9royo1sH%({+IkUhI^gUKTebK@=;|p|vPv zy$-HPQL2L*isaLf!XVgH>d;y&e@q9@ohA=>BW_5rC|0XOmk3=L;u~sSlOjL|FPJ8m zy%CqFMG7%Gbb?@)po5plVM=^PjhM)?by%Aym7{}eLgeb;=BK3v;iE6`yRUY37V z;sUir9p>ESA+6Tyh^pj1%j10;5C?QvM5D_?qO|Id>9E?Yqspfg?0PQ`#xnBM@(^Qz zL%y{f2a*MR773LXuLzOtD}u3S^T>+$VI=}?OK7NSUs$VyYt?7#;9B*$vIPD$D}uwd zz%@@tnJ`Zde={yjo5YHB=u&yYn<2)$B6${wDn;LH(-C3M_|1?oO_l>XY^8kV&3J?$ zQE!F#b`xrJG?tg-;cwA4!o0UadgY3)4oz&R1g!##4vsB_uit{76Vlmq=sdyBu7g*~ zu`A){M5)O-Y=J11r-N%k%+SFN)8#cQ;}UZPyX87`jbK-zhs)C2@k8=Nsd61w+o?XF zgKI)m>fpHx)QQ ztk=OcDN1$l8hQ1q_+A##`br&E+aNrqgC|UvjU{l@qFAjCtu0Coe76R%2>)n81nA(| z)8$zuaMXfbj1FxPQGS9BjtzldAw{q#maRi4h+;W9xF$ue4qh-{9=h;>acmU zvE#(Kr zrnMooWC`kR_}#`Rce#F4qGLsz85kiSVTz)V%uJ`->RcrH#QwyJG9Bx z!3&PbYu<~OevuEq7oYqKFI%jq5%3ZnT-%DlB(M%=yz646U*%cr1_%7g*;wRO?}x}$ z4BYH}AGnx-^WKlezQvmW|Hi2ea?}SQOV-C)L_YbxhQ?qKt2{f=$+_!OaiqRxeSClb zuV>(z^|1hle=s;eY#HLP9n=LM#Ny!p!+P)n1`hs^!1sL^FP)H|{%~-B*wG1=rH>E+ z0C_^b_2J+!0WRpL6X>M;=tqMcVqg1!4qGDN$8_*20atZ!Z7ZTy2hXh%>Pcx>dzGM* zEgM>4H1*mLFP)Mf+Yp~{iqqS5^tqz%)PW88sPgU&ZNjk2#}=F91Cs?M@#!pI+7QwJ zs~r<@Y~;p<*vUdFj?L0x%Ntabdic-f7>j`fpDlb^6-<>NZ+`o6qX92@j;!?FQF z7aW_S!zTM4(jf=K?#-4_oDjoh)xG z4M}|34_o7h&G(0kE+TPl^6}CTxy7c?ux!eT&+;TL6V}XzqjJiokg)!KSZ%w4uqE=d zz~=d34~WeS!j6#N1~$_VJDDF*VJVKgIr5=RA&xb8(>~$=i(zkTKuX0v5|yg9NOyPeDd~gWuge?bG;1VK_7JePU8M8ryV+n9Vys z?{Ab+<$t!0mj=mWx4kZ9$(Oc`mxgc7+TK*c6`7G`)nQNh%3>Qr=$lGEBai*!s5EVJ z(vEkft+x+I*~U-H_cV1}#SAs6SSw?9@3592liBB7ek;4%X)Q&@?#YwX=$mzQge_nI zr`&4i$mLaO!wL~??nrrVn$7;!MX?Let^H}-Q0%Idg498^KJ?&BGfItPPL$UR3 zcb!z%$*Bh-?wW}z3+5&pGF-RwO|PX7ybxn|RjYU3qAJoMRZz|bx!^!Y$8v(WDsslA zj`2p&yC)?bTia?0iHs64e=}Gj!4?WwTMmmP*bD(Pa9AM0CJNX^&hHww4b^M`JH}zB z2-fdror6{K6$c(7V2mIv<*@ApYb#(YIqW@x83b$rhb<=9MN$TY&gZbX1Un{Rxg7Qs z!M+l(%v+;b>qZi=Q~;AXVJg8^3Ye9{dJ=4bfCY0{7{T%d>^2GINih*DSH5vD(sBAa zAn5u9)a6BW`6e|FdrH*JGkA7_$WG?j;Ub&Evjaue&a?N3Y%2Bnq@+gOIxt2#U-=Cg1E}&f&;$n6K-c8VQnOwc;8G*9*dM5UM6> zvumGvNGSgr+Fe}O*D$S#JJTBKYHlx7C9^XZW7O{Yo0{#Yq~fqzySeBS!6}NA1zf2> zCG&AmPFWfUn@}y`*}y>2V2&@*@QWFKjx|rT(P=HvP%jY*V_=-9q6T}07-=Ut2Ls7P zHDoig3sedDKpL>G(}1N#J0pk(fp=yd$>FqCY23pI+Lu9hSm_{|8kWF$AJdBd^%s?z zW3|~mrqZW7NYDglto9}4xlJQ*#%gy5jeJJ#`%SlmK+1taMS1n78>nE{9VogRxRiBf z6({}N1SFo6b8w038aemd_Kt7p^;Omf73y+~JT(vv_Aa$UB-dW`HnDjCY)~ozZBpIT z-ulLxoi0N9H#iXWd0zySIu&Jz4rEk59hsfOc`--5q7MHD<@y0kR+ElfxZX3O zP$jnGGy7EM&t)n^hADOp=r262Sxm5IF;9{9xW$xEqoLPabJ1J$3RQ-xUx)@2Fyx>) z)@-hIW+K$14}dSs+3q^7R-*M(DnVU$l>ya`FkO;w-7Vs0T7}xs0VVPWhq^mPPzL(n zM*8mrLho~;+nIS1?}K3DeNc4!a*`C{BJz$aUX!ajZcm(}mVx=;CBgeVW>ik=h!my7NlC zT|Ckhr93IK5b~=@tkFxYY_z&RvzCyeJSpP{7e+W&h1wkkqpk!O?^YaTkfFRznE|51 zNSB#?Zal#o#u=bt8&ISFXbqk=nfFQIAuuUS8BHT7zZt<|)H))DtWUB*P(Q@Q5H4p@ zf$78YvF|(GdoQRjtRegGA*=){YEU1S$46njBF9yBlupZ8m648#$6#?iNV$*JP#;&T zOOUE>qxxM7AQwSO0PzM;_rY;JM0Wmn!xrlroCo>_0+^lUtbm`GnZ)zMJ3T?^*a)O|K&f5|U)(X!jErCN6QQ0QSOW z)VYgUSPiu;a0L~CIP>JFA3ELpykHP41hJT%?+86wG-0wp<6S^dPf99rT3Jn;hC~QX zjbRQX*vkD7Y%u6D-02p3QF(q)86A3Ox~^jw)m5_DjQaY|OC+?@$|@)-H#>LBs}Hwn zz0tp30nalsvGsd3gNdG=2o>|qaB2B3kwj|GV6NvHmoZZWZpS=gAS8sK!?SbNQW`OR2({~ zg)Y^1FYrtU^uBtQjL(x&jp$V!!if8SE%2W*#qU*Tfy8?aGYcC=#AZDxyng_afst;> zaOYbSd~z?8zdzF9?mSRr6nGVN2QL;a9v9sG4dfyG4n3gl2{%-nq8P(;2Z6(G;4tRJg(gp{w7) zds=|qv%y+GMJm#)m|*b&Vv43IwGmm~evlH_VYLu2mq;fQDG+%E^)(#w+dWCam>x-! zUqHvCl~HUIB=r^GwF2ClECO7UQMi-g3lJGHJ=~)M(h-@pJaj@$!RAf|`{R2vU2Cl+ zpmSunr|d)F7W?mXYR`1tOuU}qDz|$O6R8sVnpzm%+3O^qdqSs!D+bNQ0waY zjsf$9k?`FGbI@|L^BC&EYbS%bs4MjmOcDK)Z?z>JR$qD%-)>1WZ>jQb1&^`^8Kb0D z=xx|~IKGym9$_Omr6s+uz{z%53a3foG}osBzKPSEr}t?@gIfk*ko3q+#^*4>J)CAg zy$>UrR-7i=!HGU5#8aGT4ZZjDBf6i{yhiYJPV+Lo2ZAO&@lR4p0b}>SmWfs8NVETK znYiB}P&RV>_3K1vbA!MHsJ(EV!anaS8U$&ss?k{YrH)M` z2suHB64d3ioX>Qf_MQdW+^K-UJxOnX6$LZi3v~`=8H<7NS;mvBUmMpO#^dN$GK|Uo zhLNjY1egq-45L8>a5TY*hpB>_UNT=Nvl$w*82rhUCzHu^-LktbJJgrX5_dwlmoh?c zUnZ=L`ta%vE@>)^klNFl$p#bJg%^Wbb{B^KUdj6uN|ez}Hxzm28YL+wsfXSqKjlgJ zk>1B)S0J_U+dA(D&{Ek@PTa?Fol$>E6wh+%b@ZMHYCmh|0f*1h+dyW&~z7 zS$1w2lWkQVCO|6*X6AJTqb(3-@D#8&qAKq;ART46!9!w8T##;5`5AJaFJcUp!5b1X zlOux&d4PtgCq<(7h1kpT<`ZEQC;Xc?{?BKDT*b!ozXHqygewHDjIQN4!2J#4P9Ali zI)%!>@7zO-@6a6VNwNF|O>h2_P3ztv1j9ljgiTd@z2A_|kUu5Ty8)jxDNZxOktn~G z2Jb^mn3ScDQvlp=mZ5Na#~x8ZF)cO!fhL z``!}7n`%b4Bpyz@4j#8jJ#}aNI8#$j5Y+1rbx?)d2s{wxEDA5D{N2d=#G=A45Hym; zf+uMv*K>aYJx#va-SeBrSkr!*#G2L_7*gc3oPHdquO{8!NA#X{9}%I;Q4Mat5IBuf z4&s#S2-J#GzQQPpu$Z77IAIJY97`bj1`}95;v*bP(5vJ@JV}i>VOs)y$q5sDgo$^^ z91n8J)97h5^cw=bL6olQv0&SXs69!a0qk9MP9A?e5nmr$eEb1p=^6RX&mA0hpGIU^ zN*cNXOEDqG9252ZL{iX?%#)?Goj`2b^?ZVH8$y_a=rEs-sV4$RZ55_SB)sc8h&KRh z(Etv-?t81j8*LaE)Yt#;b>9wZsRMZ*YwEst2>O&ilq#G-(7mt-(e*i$-|TN8RJIpE z-v$(FxOtT+sg9I1i$;UP-SdH5*0d25S<}t{MSXvX7dXKSd_o1-@bR?kPJ{?YJV`4E z`V}YK&j}|HD2k1}c19mzHbLLwgzGtBB!O!GnM`7}`-MgpW7(9zFL262PWcnIEY$De zZa`S-Biu#M3{LnMCv+2N9TD=bFJ$92DIZ{OC;7xl>m%n?YJN~5OHy`VIa=55{_&FG zFV^SKRR$|!8bC>(+WdA{ET0{RcPs${>#D>ggsH25x()PUyo%QH=&FeHGlDXpu8PNk z8eu`oQ?%nSEq){xu&;s&jXjg!!tPG_5aUjr3qw+&h`Rlz)TiVfRh{LPXV>F+N%P`v-60eW;egg#JJT?(f{)<25 zcTbf@x{iY{ZM)fvew%hQ!~IC`u4Kmfdv)q@Iq!6s@uB0g`*gH1{5fM8aryhx zR-^ZK`P%6ywlMf|IyL7;CFe{ABQ5h|MovwzVjPchU09`eflo^{p55f z{QdrPXZ*c(IvOW@p?^f;Z|^@k;cu5SPZ_g*l^37sV(k2@@=p^f(%j@%zrDnpzsP6K zTxi?k7g60Vn-KigG5OE4R`XBCK+Iw1)QV$r$hm0ayT|0d=OWBS^{5-_jAQbob6w33 zYA_ln1CGfn&&8NSH5dh>&5y}Hp6g~ldDO?YT0MMJZlNZb->Qezsf&)v*=o4)g`@Hm zwQIKwe^ftYpy>P#c2|VeTMVNHV(&ZiI9{u8go;;ZF-K$vV9u45OrF}wBQ+#EOU zPf<~wI`b#_i3DhSiO2!3&5Nu^GZubNL6k=2D9B`yb@^%Y%$vf0UlF##P_3ayPzb=ta3-310-fHwgyhEYFV+v)67y zOd-T&%pdhWb_KzgeoZlS{!d`Q^7niXU3*gI60Y_eyt`8p?Qql{N4o);lqS7Ms1s<& zg%Wco8%aEjAeoGj**SyFQ7KsjQ@>-(66t*dXLe>VF===G0miEx>>olPL{7{Ra!XE>H%wWt~`NTv53&SOqfrhT<=IK=Gy1|g|v?Jj7YDD^dFH1k_`giPNY$kngHney?mv%qw&yi zHtu%eCot5Ts1oCD&2TpEiV5@$2jvfE<8BgxR&&r0y#LQ}mqLUy4zh9An%=VxvT=8Q z7~VUB!T%U{UlZO0ynftmBE&_gOgHXa1b6QDjXRdNlJ$8~o+X@Gfp>RGR2p@#qg^jH z{*oRi)ORF@Httdh(vLCnjk^?r9ixu*q(ssCO3v)aKxTz!nRO?H5atz<*?-(!!9j<5 zabJURcgaD(1)Sjz^q$EX7IB7eaE29x=|v3v$K7gzt`rQ#xO7SKG#{qfOKaq}7NWiSCUySJ_mg@30xP!zJM zqXdPG70RYUcOP(oFwKe}pR>+ZSF_gRERj*smsi!6tonT#O|H6A2$;)gj*`shp&Bp> z(1`L>J7ge%@)*$?BHBkpf)C%&Q$vk_`L_4yaOf$bTv;I>zBAIeY@Zxk7iV6^SdFlT zPBK4dvY(bG)me(5 zAA}Rdt@q0}>V_JhydSgOP-Dpb%M>IPDa+0wnVzEDD0{5X_+{tacjGr%DBG>}z5>Ltx^q$EoO)2WjEa(l~H^S6XL6}~st@K_)517~4lFGD+XwMO~HQ`pSDZ(&9lOxGQdt7~>D8=6R6je*;-sA;F1Zz8oap4!G&HhZ=qP-PqC zh(*d>}(FW$f&pOlxj>VmVpv=%dQsX3|~8 zK}Qv}nPf9B1s#=(ph4EPOu4tY)bWXPRM@pAv+r6~-t6ogj9*7-UU)Ow>}-kGZ4jkk z7h=*nyHsiKQ)8ZAi_OoXgJ$R32w+L7To%KsFK_1D-_XG7%Fl3qU+|OQM3_-yA*pM$1D`9-&|xn+~1j%rY)rI<7pvn$DvCNrDO$MM0E}I4R)3Z zPVIc*2;sRp?O(j=EhsoMzbwk`TFP!nm|HQTv5Y7u!Q9FgOohfCQC@2yb?(>&qlE_a zD7XQ;>%11ncLG?wZ>w^sg%n}D_^EQCh1Ajb?WaofAgM!}G$s#;mWTKsryd`Ft|SLZ zQC+)#N|Fglu)Ut=U4tQ8zkd&H<)~Y>DKmnkULjV9ulD@BVOx6sr0fPKb2uDvh0SuG zrE?-ltQ13zZkew0>V;x#<8DCE$~RMRNyIxEk(stTOC6GEZ|L8HNAgtZN(&Sn!6kuFqhFcF#)Ii>c-U8T zQ%0Mmz7KUH>HEMuNcu`-aL`OWx8*RY-^tBld*Zn_o$AM>XJ{J~;HB(zylm$(sDyXC z!pQBGNv`Y|<+NF{-W?)?5+^)lKe(1;c9zf@08KEUH(3*weS#*u#-P;nv!5%rV5uAL zu_ss`*IVCvKkyz~^25J-%t1Q6YZ0%GY=xb&(Fp@p$4=WwV?TV1>MpZhv_XKB-S@%x zc0dMdK(YlrToxZ zY9IJCDy1nSTB&I*b&mKcnx+m-HT*&lJIBBwuaekCN@-Pyc4XqnzLd4X)GtbLw2?9* zlLE*-)-pTED7+0zdk*%6H(1&=gmFN*UvFAkQ*-lkQfBp-NV)EX~7ngxhPI~y{%*oXIk2w*>|FKve|hK z`gJ!dtcCxqY@%F=mO`Yh%9*y(xa6B3pkMBRC#98l7S4o=7J*h91DUQWHUzvGw=i^y z6A$AkjSk#4Z&dCIm#k0pWVLI)g&z=m7sI{O5B(9?bt-_oiFK-DBlgNk_QG1kI2q*J zJV~v0P?GX)0*quF35|U(M0hDn0C4BUsLeJgFSnAyj8{yGxxLi>;jW}H+*$hMqq;ga zzSJXtFpf*Xv5Y(z*w%c(*v1muKdC?6rbxVFqo6${ZkvkB8AcjySw(-Eoimj=?WNE$ zYCOm{gEQ68mr`;#yU>rYebH69MdiETFbs&u)b)Na+PqCQFZ)WB{ebw=G6DCgFKv38sDgVEDNQ&eZA$q=P=j)Vx6%A0l-a@G0#pGuNmIl%q~X zqscW&o7-uC!!#1S0m`vZ%zIrvRBA(|&Ude)p(n0MfomQl@V)?M z*wM-XlE}kQIO~k?1^;-6(OmXQ+1RqQD48h%PLKg1#=pSQ$yJ#l13m|6nb9e~sRIa`-xWPvq}!(t8o7>Ae~62j8u8 zpfI1HX+?lZ#^Q~oFu{}3jwsf@3+exZBI;%On)jGumB@cCR-Ksdu%&ejw5VBAv;I_IX1D zae_!=MA{p4#eT=%#Y#B0@MEY~&lP1aeaFL2$EZ7gHLBU;!^ z0YEfuPeSZeLj2r8(?XT#j#84NH&EniXzJ!xHbc#nZm2EMe{fhg+T)HaDyyWCNeq!< z#M_V@ci&w`9-bz)^*~W*N5$;!S>RmFVvlktDe=0x;(Z6z z;HsKj_G+jHPMYb)79$75RjC%2!0+4eV0Zdz+0)i z$QoHaspv8u8$HL`1MNXF79*j|jIB6@hQ%Rp)U1xj7-f1y~z3qAq|R%(GX0{Dn_1!$tGP9Qa!ku#B;J+q7-f2#lo$& zw0LCURx?aSh?LvHPcGzFNnM#rjz#L;_ZiejeMsVk(w>BA9{R={i>RC_H)sj6#CjY2 zAr^;tTh0)s=apR+sdJZwjcw#9-KGIVh%U$G0sGh+%}~|jCDaq9_DW!s)I}PsBt%I$ zj_cH&9@Ew~C;)lZqX6B(T!3O!Q#RwrTV{7 z@kumRyGO@|%$I01A2KO;qiHGFyv4Am$2wkyW2lwnR%EBZJjAYAfVMgg3+Nl!AQ` z-eEI~@EqGATTwZ_fC2Gbjj%di@H9MhpG<3-c@bSZx4R>l?hQXy1rCgvce4&QZGL?a z!;HZ_smFJhks|E7)h6~IPum0A?)An3iCNkSFb|xHK0qb#6y6uv%vnHik|;O7Z5Yj} z)NC>^T2Ta1!#t*!S}O;-NKwYwt&|I0q>hj6T}h(w`|*y}+$5-@)MjjKn(m^`By}R( z=tS@6NNyN5)$Ur!jl^U6lZyHqiLfm7-BrpnU8Rmg2BIF!?R3K|c^3(ah;;la|A=%k z!a9tWZV(!?LLtI_^?ovc8e^W67m=rc^upULARXNgLp7DYNM&|jqdQ;bUDF2A%p33y zieL^cMss<9x&;vCkaxm4XaQ;x*g_ z1qX#1@~s0Q$wAPmOG%rkCW4s@JOCs=vI%PY2DNG9{7VF-%mW+*hNv&2!MK7NisrMc z5;M1(=*^SzF(cSdIO_EOtTQWlu~L8%*i8yCzOqTljg>+be8aVcal$6W5-YV;zKxXv zdkjV~YV^aLFN~1$ou%;&@$n5-o{E*aHa}18c2Pya%3HBg2jjs~#;+^gSY@()1`6W& zB^r{RcnM=Lf4aubS*rXeR_bYdv{Z@iCPf?jmMVj~A-3ru%EY5g;%`*Msuj8R39FD@ zm!)RyDfrdkJdFF;=rq_uush!xn(8{1=JMLz{j6%w@2D@hK7U71btUXZ)29X9z+`-r zF|AO)g!a*twmyaW8t(Xnbe3Qo&QhVf#83Qm7XlvC&aRxtzjb%+<9byw-Ie(PnC@15 ztkazn6vXp&2(8!Mh>yAMx_!)b*ZgCyyW1OinYy?BrMrDVp|k#_yFW31{1@E?RZ`G& zLrqtpLt3);gT82zn+VokoIV<~(9n~Vz*twSk2ruM+OWSc7KbovOzQjr%6U>+c7mZF z1RjIKh!0foJIKI_nt;I4+-Ah`-7=3_Jk7;Q$sWJNUhVs2t z3bEg54qk9+6xXO9KrFJ+0QEsmYapy=hc$qOC4#Du3p0jr?#Qu75b-E+ou!cI@dWb^ zqQIGbrKltHWZr^UMtQQcWN{n;3-7&XZ`u94vH9<_#s-nR2Uf7gO0-1uw7V5S)#w`g zE%p+qvH9agr~Cvebrm#C4eg2)OVoh|_RT83dV;aku-2u6siR#xJ2r=CWewK2*sL)@@OabLzHw;PF9vLER)ME{!pTyj(BmP~Kx>xSUB;Z;irwESAd| z{a@rPN`Q9M88TTopXKciPtsGI$JKD~*a#kKE&jNZ)hKkJ<{HP+fI^$zMp?de+zWDA zI?kqAJ&~VL)@|Cz65Z1A3-qJfh}CK+NKTyAykG`GMQ708&`O}@$Ujv!^^n>RajFP4 z;FL6QF~%SH_3{Wq;%^ASm+tlM2Sxo#-H+kiS}@cK4rlxv&Kv;!_$Bciz8hh*!0$E~0Y~PfKcU+t7MhQ1TsRqPsk82o2*5ZjMxDg&t z42G+`jR0G%Ad%654FTpxvCmP-7Mq5)K4@b11&Elfk0)P+}R2+VhpnnyttuI*Pz2GYcWk1g? z<7rA7nlcHOMsD1b(gWSAZiQs%ECjI8$T|QX`Yv=*uJ-pZq5vZL58l;9(1_}yKTi7N zpg*(l2SwZ~LDUgM@Y!DSiL~nC>jXN;r@rzIA~!RH(~l_cPEwZ?PbGNaSaT^nJl{DN_H9 z91QMM$HR8d`~~Q=)KM9(>!~Bz0rb3!lT9#}!j!p~xnbFu`&}cf{isf} zkNI>kuU2=!U4VIqELT-V?6Hh_@WyoxM=)NfsySoQT;WEgd$u8WaQTouWv+C2Om}ZW=GsvAM7hqL`h@O7Gs%j2>AU zw@j1;!^wi-WHtW_t-xgbUIR+pP=4(#4RU0-CdXX(qFx?+H`3ncKl!G}3*Uxaw^_Z8=(IT@2?BK%p+M>qwoxRVA z{3cZJ#V&SF8X3+~w)vzd0Ns^fcO9S@!jdV~n3t8?iw;tF zQH}!UrF#ew?4aE$(qdF4>)MfM3F4iiYr*8;KVy2#D7=GXM*62Tc*8N{JlfKL4lHbc zim{_CrkBr{%ILlT2}KhcZSE$p&C?P+6mL^04X39^6cA_L)#N^@by?DCh;HM`7E zL2EXwBUsKo0K4fjgfT_RY=@D4ez$*X?7g1CyV3b>6?CZtH#fP1OD$5gD~Vst`4-772?qwGtOdIo&Wa}OxDQlx0? z|3uy|MMM`8urTET3H4|{=ul0td0)}Ag#ABd^!-v+qfFO7%18H0^BkB`$WXJ~_tTVe zA&4C={~x9i_+>R`{{P=;B-3@tH;vf)Ou>&C46ysACx>qef#xl=&u`$2F@>DUi2Wr4 zo1HX;^ui0oESS?Y&2^xtd}g$7mVh_IK{vdKI_UrfVd5aswJ+24tPOpeqYkBwc29b? zy&^paJYf3ixp*ei=txruP?4U;5bz+6yBAuk7}3ZaS5~$i*&3G3%B6Rj$Ly}G$#&O( z0CK+u>Q805O-g{z*~y&7S=xy76crF+E)kR8K%? zz^-Lf&gCf}1b`L>^e_&{#_%lTBm`mqEeVyBuo5e+tX(kqPGs`xU35g@I%#*0=3g*U zUvL0`?;M?CbEDmzgP$(?&Fq}ogiIkW!#x#_ZX$wOKrW3M(>PUO$`Y*1#qlGf zi|eZ|7eHm|J1>(OaFcGI+NJ<|zM+tlE*LRI!h4eP=%Y>}LU+4G2yU@PJ9&l3Cga>C za?Dlg9o%{lKW*g74j|7|Vlc#`qv$?_Yo(Yo^Rm@XPzi(LN*(>q1*VBgum{V1l5%o@ z)YUNu6=h&Lw$X_V?XAVrDAf)W1TSs2oO&CD%|%n-&Hg=GMv{*s2{PT2CwtrAFqGdD z!G*aQ*vP`1<$Z-M*$Th}l!!|c598X@W%ZE)rOROK%ra$PRezX6!-!8(T7=<^M^Qvv z-lzY=`O@+PkxX4SJXy-FznNSwG~#l#5VLp-cIS;WpX8*YKIX>%9m zKnJG7KM}z2>F^+hGXIaJLv-j^vUf2X(iE1p3TJhny+@70uOTXyV1E`7dimn`SK>wX*W9L4Dys(Me3MxmGm8F_we8DpqPc?y#x`*V8@Ya zz=^R`liwbDveQ~&N!I!`=;*y!)HP|mQ%XU_LzE7_KB3vZjGA8BmZXx{@D_t|BNaKLVlH#b}|yvUg5{!O|CH|20@HW1qsW z(^`061Hd;1XvExAi^`{sqEXy%v~2&|k22KzA+mm)0=&flka$CjdXjuvN09PaZ+NX( z9s8ANap42z$i1nz&Sd%d>bPH>QU_bkps9&4IDOuw}=yRbMb!8lz>Xa(vyY^ zQz_X|6`j6bGCS$F7U}erO7hd!4`DF;^tIssY&vTn<)-7FLY|3TM*t&sjX{fj5sb05 zai&X*9TD+Hfl$54x|#>PWG^e;qz=5y?1$M+i&p``rB!A(N_2)4ZBZWujTnf&U!p4q zH)a@5Pp6-$atxWyEx-b6RCn&AjMx*>d_A>(H4Fzmd+{1dn~V0~uRERAGp>4946}X)}>76zN))R(MZ} zyjP?fMB1K0eU!T(`1~T$t^%GY(x!s`08+kF#=bD1OnX2Io!SPoZHDVF*O8*bX6G%; zpoO=v@C>9m7&ihoVJNs?j6sAGptfVJo*e)+cFSj%NN_RV?EH?6LcV=fF_1z!EX&qf z6YxRy@-Vux(@NK&A$ zHMsz*v!OcgpYV5lB*XOk5cnRnj=Fsd^Mol$1gpe206vV~mp)G-rX0Ei$vo{&Ae_e@ zpqVhUh@k_;#5yO&q)KiWwQ|sz%3#M4j-e2J= z#kZ_m5kZURcq@0^WGxFK*m|-hPs$Z6j@2p90$TarMb^qKHLR8A2s0dAm!B9fV*b(qo#U z6pxU?9q56D>`ofCQSrrO7@^aegY+&#fC0Fr*2&0Fv0S9;=x4#)W6G!Mwo!H3mB$%G zC2CuWcW@~{(v@>T>`8cVVQbBH;PNGvE~|5pv>wwOFk}KwLinR9k&?Pj`8JeYW$Zu|u!xhg-uJc6?hXnvfjDq09U>}@;O^F-@kN%=E0Ew~7FLJ?=5XCV{YCZtmw;tss*-05` z8s*siP>*TMFXZ~1))8PsW=I!K>8Iop4?|@JymU4+R(>2M6(&-lDyodPQ^jjz>LS=c zErEfqL8`uoOLnO9@^8wbhY=7tSayds6kgv?yOROt+CVSzU!+2XF(B&Bn2H;w9@BgX zNE+$KW(}v+LaAs&0^Ze*yuPNOOQ&0wJFF7{2D5A=9hDwAQtM8iS#zlvM9iTgBok@7 zDMCMpYE#DMNZkjmeTv&bF-Xd64`kAP*J8j@cajy<%MR8hATbr-pRJ*tLcY%cg3)hK zzRQuK)B7=Arm;YhR=L5aZU-MGMLCG65$TDCQ@TDVOD{I#Q(B*4`;~1}Yp%rtpviK1xT3V`n_K5UTSb>XkRcQmmV{&l=>-mUF zS^cQgtxFa|i;J%8cRk%E$qieG#ao0k4w4osFWqGRQivW78(D3TKRsolx$o) zQ3)I)4Q)PQB0L=SS3IWa%41`sXM-+cL&TlQoY95mO4S%Cq4^GgF!P&V+1ym=Fjjh? zZI{QPWF9fFy&0TA98_ijEjkSeu zc+&cd_je}!LLY4xu(OU!X2;S!QI+<>mlNQhl|Y)u_?N*jXBVZkr92OQ`0hbIB2~Vl zGaPTUdw>lCVw~x!CCXZ=6K%zMlx-2%u|j!bTJSkhuX-_I%qDoAR{8_HASFz<=Ll>{i?DvR|K|7|$k;%e=MnIP9A3Cxy_>L>~0z=zAD@dYZRz)4orP2K*l)>4@>ha3%$8p`$ zIbJz|H2X;^0bAz3le=R)S^y0h+JVO&cv{@t3eM0D zJi^8+Src*K@z*%zg^AKV)?MRtCFmaxiV`?6#s197amv>y5jY)`P;uq=%Jqp-d|-c` zE&o=Ddjgk~=YFdUdqV2awstJ28vOS1q;X2Y6Zjs|{;~Ay%iWCO6P0hDkm6d;Vrs7s z>xR6dw3q}=_r9XUPr}XB=~6da4qG9D}#r{Ahz>^ z@+A+<^BZ7MVhWXa+`psNIdL)c9WXz2lUV&uRNon;zx+QZ%}0 z`wo$(!JETM+AtJTPMw8k`+YPIk!M|m7@m~l1e?J|X3B1Q?>CmjOPR)|!gjA72P;p~ zR>DNXaJ>UjjJZ+x9UJPQkKL`zeNvh(y{24yQtA=a0@GNQdm17WoPu1&BJ^i=3c_z! zoKU|SuMC(h_3Fq%U5u$xaG-gBTq}AAfhqz6Nm-pIMRcq~2hiz50&3!4Z=M{$-f$X> z^Ss~kr0!2@6ALDk&ln-OL~42>9u?nILUZ_+iJ@(*jL-VEO9#${?C>JQU0ak0N02Gy&4=@;p}GmRmd?I+6!-u6%m1D9=A7MfNm4OhPrBX2taDH?7jF z>J7Z61U-X&j}OKueV>t1!kfKAMlVdnRgvX-&X(bJAWe(^N2C7Cr@ zC0%doI!YNo6;<1gDlbjNZ(-a9hYVM`jk(V!8!7Kkl{#5z_qu_Ta?;U{9mB@L&aYfm zSbkP!OCfjnWo)?}t7k`&H1#g~=jl|ZF!Jq-&XlsBZ&1o7NNp`U7|!nd$p*^fRzvcB z+kN%B4IRhg|E)167@LoU`UPdC? z+aRL(VcBU0`vOF%j=fiY+2-!>ot1;d!e=Dv$>7K|SSZzZeUJRc6Cn{c4e$A5xq(zaZ z9?Imck69PJNaeV<_8Bn3Rr0gKOaJyf`5$pwk@vh5ZAro2;{W!{Uk;^T;%~KTD77G; zemxtvDb?U*%Bkn^#UMwGa_f2g7|DbhCG-WUOKP8*1`X|otgoRhyv?94W(i-?=%Z2T z`#lQ;>eR84;&?&o+Q!v5yNJ_B2agYqt-xg3{1Ls+`c`-jMz$8osh9`>@& zn<>(*f}mLBZ6f`grF*?cM0#!vuVAsjyF~?KMfu}`?v_YH#`6jzDbRpmPq1{a!y6z7 zwlanl-g$yR5osYO^zIP(J|g{D2yj*4dy0yiP2d%=CCHS`%@TX7?A*2(1hG=8! zuzcwc$*4Y~^nOW-Gj4lEne>wMw()}6zxVzx_-Kw#pz`e-;uDl6v!(713!#2a*W_WW8Eg;1ig&U1E&m0-hT|FQ zHyYv@>=nQAFEzw7o{urSgUdduApvh2XTaWj{}+5T$0t(*+Bd{An33acgukAqHIUbL zR?GLsc8sRX!vqw{+^-S%;Xh?~ESbDpm3_0Z@|l~aT$wGk8#l>E%)4`xFAw6GpTjk| z2M60-P3@k+mW)2-`S^n9bW0}Ug2MfhHc9#bD>;vC6hQ3sN-RSma`mLBWtg&dj&#@k?-3Pl5ZOHg@ui`Pe8m1QCX8nFyw;$|=)Hd5qQ`m`EUtX6 znC42+5$T)M>m? zB@qT&NQTys0XLMG49|cGn&T(HDNure1=Ll7Lk$>w$QZCTP)c!bn-Jhas$PHzpwu)VT7dH1d3g(zf>4etC7YJ~AA$iXg&e_H?@HwS zda4*DTSXE>)+En!Rk~&!`9zT%QoH*`HQ-`rLU9uVhu!%8B{4{_d!DPQZx=P|)lZac zht%HDq(S*w8#T&T{(1WTX2U)~(Y}C!*}uBv3s%^_OA>i`eV5$AS2%@PIsE%%_P-ch z0VR{)*C!U&^T)hP z)-_E@6Fg{dVtLm%zt7q;gRrar^WV<{>&$1ZS+i!%WzTKzJ##L0 z&Au6UQ|2%2ElTX3%R9DT4Vjxwa}h%7oGv~(U^})`T$;<{;xp?B4K;1_p8I5TR279ipx$m=7@zzovEAE<)X`1UV>viKBf2c$(R{;ATntz<4{+WByz_ANt76vzY{n;=vZIVR z6@K>?;arG({qI$=Vj&*V&bURI@ZCa~@T>yA>n{_|ScI25EtYmgM6cvoX#s<@KJd$u0Z7bQ6F zU{F%oJ@r1jmJ6MYa0V4)MxP-b z0nD3-!o_?<%QA3B1azc>|19Z$RTv-P>wV(=?Jb>&5ylMVQOn5HZ)z&pzo%1yp#0wNhhIcA$|}o#QW|WU9{_e5xFf9>s=?x1OD~}kqR7;Ze+ftUiBk%LnLd@ zcBi^^>d93ZOXip#eZ^||Q|WZ;JOU0tImiHL4l?#jFo`$w0O%_uY6fXz=vInC8>oCBhnXn*mG;6sf|okf>o^gVBO7E_D4yTLPk zFl!7I=ZblkJK{1Z{?9j$zo&IJoj}Lm?=?@hx5pqf()amri(K1UIW#PEOQ=69o)?pz z=Y5UxPGZCJJa*74o!~Oefb(e0q`(&NJf{Cxk)jP^sM&Hom}n#;%1Fj6-hloC-a((jSWwSQNp* zRrS!y({bYB3%n!0Q$(#r&m1jAt;N2{jaV^bE$$SMS z{IpVBg$#FzcI)s;+!brYq;=%Xj$*?)a%M;A%n~vX&Rip%=|Zr+Ge`V`GuM+dq2#7B z5%?!(QexVfX7Oo%6)S%QLxP-XI#)B@iur2?$uym-nNw<=*+FbvPtJr?J!j7Ni!(cj zi|eH`H%Mo0AZNyi85_u%G1{3MxFdL@3>{i2zS+RzgCCZ`v&%)Jjfk^-xk%gyO>M;J zjr^Mq7tEy7Vsi%5VH0_ZrJ%_=9Nxl>@*|ey3lPIS{Qfo{v?mkk9ZTpZT_Xzc&M#Wy zx$OJIE)II2_hY*_?ct9Y*X&}&R*V7s(c-a9JTj#s8lBM|+woUu33cXp#BPB$i4~h4 zf%q<)$)nSy_l=n!LU)=w2s@+2dz*N2>eD1N6KP{YvIddNa0|1xq~1%sV|KDDHGDnQ zg_a#Q5$QdKIPZ24j?K8+#*56&=q7fy6OV1?X~to@coXp8+uBh?+HJuGZcbHV4TAY+ z5cxM+Kr2Y~gW#Fv>bAfOQnTZs@q+w4mVW!%idHZ3-W_60HGj=OFyZLe&$kzkzR0_E z{hH#M_ZjSm1kKz|NoSc^eH)y!#Yp4z?a5)G#LjIfrTn(yB7_GwjG`O+L@FgXqpDkNDeXu!OX)ojlu}8gX+aE@ zReZbU@0Rp?d!#I-6NJJ0)@pW`aFo)nHfAYxTdm|=v};wbl%4^{ETtJ+p!f4A!MF1^ z+%DQ}=TGKlOV@w ztfEI+k;cENWXB@Ne`y%`m@mY_bPv1o4M#4?#Q+ng;C*JqjU2(Rs+X_rLAGd+)g@z| zACK}dGrxZ9?j5HN6J;EUCtGuI`ol~cCrThY3uiu3z@#%Kkie_d@MLm&{wMS>a!z{J z1L^(n7&x8>qyO}3#3fLQ?dB2rhpB(ML?)u>bJF!24NcW_X5e~D$#T_pKC(sL@e3HH zdrhyxYi4eIv(4IJZIrRym1BGQmLRQKf5Nw>PcMm0ul|is$C`<2pUS>88-A9bY^9F| zpg*2>J-F$@Sh!~1^#_|SjKhz)*H7br(}f-JKmYr=*PC{xPZ-@E<)7N&gj;iJjs z!K|~L)ZBL7HAF3?&%UP0sQc-sjQ74F5?sJ0zvEdcoDfeBh)WP2uYlCl_4oL#TgDanj}Uo>5G3oJE@5s&y^_I;#^>u*Z( z)8_R`atN{@i}DRHaQAs_quJX{L9Xz8F5P`z0pj~m)eT4bEdyff-hO5`7sh{h$J|-w zeHaaoS|L7TY)=2@qn1;{NbN^Dl3SRaVV(|uMU@1dA@Pb$i&KxRAn}$bR}<;ooH%ok zauv3(ZZ5@}Nzh!+ysuXJens3|)nU}@C-Ias`pIV0FH#djRvlISVc8!|A9IE^?TVaN ztw*pB;dF%YuKudvKM}@BpQZ~c$#T5kuj36hMIe)Kn2PG(Y2VXiFB&Wwu9;-6dA8C` zap1W~e0$Y*Ih+zU-xdtHsvnV(Uho-QkYlTQ3Q4Johj4?c$@RhwtL{SBY*kew=obo@ znWtCG^XOG6grWJeszm(4DYgO1^$p=Fc=doCz8eb@@Ouya&LDI0ufeVD(GY+-KyX8d zA({Mh_{KR=dKZbmlgSU0d~WhTINSH^Rhkmsfq#hn2u2aUkKkJKUXgxFZv9#@QY!WJ zMv?zRm(tA?`H8q@uTo0olVx_IO~E?*5;mjcEOh-pXz+!R#XnX38=lu7vXq(%{oYvxt)s16Ebp6fuGDOnBt(puy zBk&0ZdgAp9;`#=PpG$bh23_Nj<=!G_7jM_%i@A)ANzbQGXQ!j$k64oWY_jOLi|;dD zZXqu2!rL$gi}=@Z^5CFbjDMYPGnO_H#v51wGeq|{cs797}GCvSfCdaUND(> z9XSm(!e;KGijrei6n8`M+g{$e#m_iSQNK6};$?BX)mRosrf9nl#qrfFF?=72W1USF z2mJpwio-6ReH+D56e1e!M{#U^N*2fG0jA~Q{|TsLU4iY6r-XMmR{wGX%LK-^1HnnJ55>u40tn6X}0fAnTbp z@*a=u{Y+E1IFtknQt!sAZ+t_@%7WC{^t+E~ah(F0OsG9TB<{uZFoMYvx$Lh&3@VX! z`^oZizOM~cBKrN~F+VBYrO9kHV!R-{*H4p9YE--{*_?5Yhbrzty-A zAZ8rk*A2fR9{Ye#GKvlH%?Es)agB?a2eEMaG8Z2n#Dh&yqQ!^&P2)u-KK+n8jcg{G ze8i_3I3_UbBOV)2j#M^&#Qzm=7k)&2%x~q1;{K0OqkT1E;m1flTwM5=+hfLEp$yuh zrc*O|28|=&o~kW>)}Y&UQoA}bP4qs*+ut22#lCx##GZv1zLql)V(`ejQ_uwOt-5r% zMlEL#z8i~mr4M4c1urT3X7JdI{ELI{9Grgx>*5J}0goBc^-uGwId5Dlef1E3v%#8j zo{~G*(bJLC)8R?5d8MLcMU4H_JMW!dwcVaD#a_8_>*;k% zD)#QESo|^u>D2R!)L^vP2nx_|Q2X_E#9S1w&tvEzlx4f88DEU8*haQdAcm1`EA zdV7zrbZ5o8^W*KO_7+qu-+5~9vV^Gc*dZGkR@o zDV*ZlHn#$f&^fUuOtx37Txy3q>@uH!qdH*hwwWr;-vKi4GJg z6@t{v?D2Ln{s_M-WT^CO&wl;Io+G?dqcjR9J9;_#+lBWCkJAFZlKP9#FL`uNEr5ck z%qy%|ys>K4T+|HZpM?u5{!>>f2w`9OW59$y2h@ z07N6L6rRe}dH9&kP}kT~`(8&?sdT?o;ojfhj^|!^5B2XqV^Yqv z><1??ao<<`3vut){Fzek*WBJnrqR>UvsZu7-~{hv*F~IM>$%k>l?6L0_7zoZ+2z~4 zRk%)Yd#;v3?kW~7tk|+>Oy&sR&i_;_-zudvAGtdH_6jO-)sv74e4t1bWKSwcG|2pS zEAmRDyED>G?cEnQ6!}BlLQhnYx3=Q#eW&)mUA4IwA2za^`g6Bxfu4U6fIBLduc+8N z&*xrXkLxKT)XMi#@;CXAM;}L7T=+b7dCzaBB+|%$WQQYJ$=Bsq<{5<*!g-RrS`U#8 zA_?_O)#<$T6)!ERSh_~=qrBBfT?mBIJY38{TdR20b$o`{6P>b0Zjw7->C7=3T4acyNes15r1 zYWz6Z78bSl`)46X4y@pM+an|E*3^-lxf0^kLZ1?omP2lN8MZqQW-7lH=C10K-r2$z7i zMYs%fKf>jp^qD;`XgR{wp!6IoEAsnKAshxe4q-d!6@(q2(-3wR<@)`NapvCzzzrY^ z)Q)ftXfmi9G#%6fIsvoKtBU@g1S+pE>JJRS)kJp&H=rE zup4wc!iBl`5!4t7fUW{i0@@bgGSG5_%RwCodqM4}6V;$;2(#5N4B;@)aR}Q%lM!}+ zPD9uUx*zdfpl*b-KpTUf1G)-fH|Qzwa|`ifI{**p6*2&HKf-08<)G!DX~4aprx30N z9fvSm19^mXdDg6GWXr>;}LWIjfw=_Zf4=YBk2jBwr z!NNk&8=&Q&Ujes2k6PXWmV?HFmVs6SXD=Wgifx1Bh(NC0vrbEuY*6*K4@j&gs zOF(lVR}GqsuwxwzXpZ)ugC8#HU_d8=77_!Lt@ryqqyY3F!sVb|gdH2;34}eMcT(%w zh=ehb$^m86yg>21K683tAmmFx(-5|ALc-t|f=)!3ZALT91(1Uu^C`lMXnvqx&r;3H)Oi#Jf;xUc z0_Z6nKf+MzF^{9`wIjzr!-JrXlc+<~gM#Lv=PUy)#=XG)3p`2p1jfXuGrR-;L(DkC z6K&OB*7!YQ>lxm$^_1^%7ceE{zZ8%O^z(wac8&K8>4Kld_?vh^M4#oo+cdcg4`{b( z+%SmFdb_|N^;2*UdebJRpXHrxB}M=yj0u0@0l-~nd8;PRkFAXmif<@zBQp0++zJ;X zT3|Qa1#rP-%nfx*|5xKb0?G!5hAlJ#-r=D^44o5O2h6$9?+?Ilx(F))HUJoj(?u9P z8=e9Tn-Ati7(MBo3=GAuv0O$^h-cLY88cvj1#1CpFEG>z9hr3jb_y7Ztri;qENoGI zV_d)*Td;}1f)?f07n}t!&?2}L7`+UzZtgt5ZXn^h*lu7~EEs)q=mM~qItKm-%n5zC z9iuD4AGwAe1fK@5ZcYN><5_hQrlJ`KxtYL{@H=oGs_)&QVWU;iBtyQqjy&n5?e|p{ zYyz-Cg;DyZ0kpNe<J;*mes>ThhBN*lWPbELa(^&n(ziz>d|&@MUX&r|N_32C!-i z78VGXTd-JQL3#CyAq7|q3pN6n-GXHSi_e=_Kk`g~DHg#zV9CJ9opcdh2h0Hs9hG?z zRsw7QFxYNhRFnrzePZ}I9-TV{JluxOi{!6>H_?JMMsvxsV0K^=ELbuytG;w#Gc9rx zfVm}Rmb5HtfJ-fc^MMsxuwr0aEZA$nN-S6zu>BV7D`1D}VMyNx@T+=3A16mDQ`E!Zkx zk-(^>(M7FqJFv8Tk$9fBHm2l@;pcgDtDwbxe^*mN%3Og=>|!woGOg0V>sN=@1w;D_ zi^UG&9a>VKHx9g+OT}?BUP1kI^T69(AVPoVt-D2HWL?+xz2LQ|gV9amGhm+oiP68~ zto^A1G3R$If^S(SHV{o)F5V>?SSXI0c%i5vI&p=F{sT02r5H%`)Jk#RABdk+M6!5YJOmj$x}n_$6`flaYs>A+@6 z>}GYI0MKm_%mKF4g3Sk3Y{80wZLwgl0V}a!Wx)2=!%)}00(htnI02sbk-{P|{UX0F z_tdlX`*Rvgm(Q+u`(re&zG1=U1M7mgb#9Za7})%Iem@P-=%SkZ8n8kORtD@>*aW$o z9{LL4UJ2Gl_5llguD-$>z{)LhVHobtw#dZ-^I7ClfUT-0hxA7P^wa~f;b(QI){nCf)hG#9QbJjmFNwsx7f5;+tY2iwrl8?-oA5&z`py&9Eo^80%e8hsOOy4q>P8vD1do^139jm0|9PITgdU!w;dDULTZ+OIxr z3^ztPMN4jU>@eV?8vlMI9r$nXaXInVm}Wn^ z&XkwFxYOdIwik<$@VGMZip^*pG8;ZPiphFlg!r$`=wwU_5Wo3(Yq9$*ZyuU@%gu^W z(m=#;Bce|-6q+^l{+kMaghKCoe*bVv!ED6O);8iR;H~;v%xQqc@>=-)bK%Iq&SGFg zBc|b~P)}IE^ic6h10%th+Fx94V03hB`Jl#siArUjOn@9$4JEU?`ThTf0|S=>H@%+` z8o4asRxzTX5!qm5NJwZ(ng}(FR>IxTXde1GdK)#}3-vTIZSPofu*Of*ufUx*Rnsgs zYp~znxvPnj3+)Ythq@aFG!SSzt;BnVVIz06;Qd5WkkK)^8LG!b44eX=K=G<84fI#c z3GMHS89~OdM^jK(NT~KgXiPW6nagdf8?nU!w)KrzMZf{RwGrFckOBu9+VFc*5dD5X zDEvQ-*l$7M_`N^41Mo}1gcpT`yr_%qtJFphoD{#pQ_ zk2;3`5*u*5BbjujWB8gl_FODXdNGz{w#PPw2xI(Nwm+FM|Js(k(FzWBK|t3snuG9X zx0v{koPWyyG;BxW+4cb2ck%3vfaI!pwldI`dp@4651h}h#XM?5>+6@C7-5K!FX!J7k z+V2ZMoEKv|BhDYOFH_)R7u$(=_HEZql-T_4wvXa%>$>Mc-FEZ$f4WmDrQHGS?{34- z_q*Gm?sEdpceg>$pWR8p(s+_X*Ff3Ebr8dR|JoQHRzNv_J^=sr1az$ms3XEWri_Q< zA(0IM2LnDyWOEzN=U*nW_i}?~pG;)uLTm`U+}L&?k?m+=`#q7J2qk1er0x4eR@Sx| zVjOF0dp(g|YHNEXk?(JpzAuqI*Pdi*?6#GOY+eW3bBSzEM;j#HinX1Awm943L{{91 zWaf7v{A5?#=0x^EH`@z|Y=8W0Xm~Hd)&}e!#RH*6x7-;p-?06h$^L7g*&-+BGFefe z?Q|wP+|aghG&>uFyj2C;KF(yXhF}@T-Prbpi@l2fnQUGY@D_yHzICyqp|+PY*>_D} zp*VXYe={~_GIxwkWU}95jOCeZaR=L?O!jF9WBF*dI(9CEF#AtS@ zi_M?OcJ=7(cd-u~w#zP7l+*>kH}!%L`?eRU-I7ed=k>OobFm*&Y#+PW=lyIuGg;m( zww*3kFu=BGG&_-M``N`l9MTN(KMk>co5`*ZvAvhc4-R#fX0nTEHt1YD%(l_Rei>#f zb+P+)r<2l}bV|UNVS5jXM%Yff*l#0j!o|M7!-i;kM%k9T*nv^>`RT}hZKT7I3E~#DNGK6VD3RN+TU7wb! z@hrI+wm&IpwO?LZu0+Xslw6pSb1G^^rV)9$QtVa{N>qgE=jtoga)nB+%%V7Jo|IRL zSx`S|aF&uUSMudbP8uwZw=+U=bCitNqSGr zoe(8gt>ns;oc1q!O2t!^Qp=Y}`EJauBItx?DTQ{oim0iGvBO@E3cBY?_CKYg)nqAo zhmzOH6sly(lzU2)dva8<>0;J$Nb}4zga)ef_@9XC^b$cU#`?R7D_ptZ!PCia$bvh9wo0-=d$feahWoJJzL+9oHg|gDO2+0 zs>Jccsi_N3V474LqUFLAzfe(KqpFvYJibnDG|ROsW1Y$dhw`D;bw#D=P;xGdvs@OR zJ7^z(E+uc*@{8)*sN}FErvx2ZP&GrhiXgRN>a7%e=*_#h3Rg?2`Lh(?shnsxGs#%V zuKEdUIgcra#S*s?)ZX#DRbO$5Qk7FC!E_?saLDp5}HD z-+^mfSuR@lFrxX6(tbURmjdM)2_${ud@tkMs36RvtQS3BiI2A>;A z+px$6%bME)@Pck8-tS}FmYZ`zimz3%CV(0&l!cv?z(j>_PBRr~131O+#yt+V|BA19=I6WOztk_s=GB3I@5xY>F zAhz2Q`)kF{5#cFdXIa<|7(}t1VldbOjVLU*L}5%k4lKz#TpDdx3C3e$Oi{`#_;`hT z#9Jvwk0|G2nM?ZqJYCwC;|1?WBcvtu*^RK2N3Qmsl;R($X!8|ba;iRlL*ed9iSLqx zZNpTB^f*sTpcPHyabZuv#F?C~jAy!xhhx!)B4nL0<=EFyOjmQ%Z&T4Z8SbDIT~&C_ z@AdKHC=ilAD9%&c0N&hLSM=a`(s??Y&7%p0wqbnbEiiA93SAW>pc%;OYYNo5BcZ9@s6}yC} zRN_p@TWe;ulBdO8x~RxW{+LCNuBzn{?}qoQ$ZM;LP^Kd21a##s5s%-3%ImSPb>(%7 zO<)V(Ep;j{Za5UhuAlcj5DfswAg*m@xU4HMa5 z2VW|e@I*0pfYCXs#4CgP{}F5kkhE94Ps*$l?m}AQaymsW!D$ZC)^_j4>WFTttYqH%9z`*%N~OrFZT~(^FSlf zusj>z8rH!f2Wa{WL5K>64Mh!y;Ii$KVes{KMMSQs8&R_lTIGa5#HXj2?<2b{`hc zf#&Kds@`Y2hK5YZIMiHN@9#a=R^oaMLMO5hI8_}zQXH?$ip0WpjM181p>KuZ(v8_c zIOIKY(AAvvQ4t;ngAy)$UkphzhCLuh?Tn39{2ZJNBfcJ-YXe?YxSq79EBR9jXX~Y8 zlIo$u+N*S)5@*uj_U}aNThXvQ7sUg&8i^={6}K7@!}ZWzdpRUVrLJarXr1OYNZ~nZ zZlkT51KiB!PvUo|&Cn|^x~fHWkoxq}gm(W3g2{#6E zPPy1M42`lpMA|`{G<3b8*o6ng$zjN(SA^e&tb4`a+fd`&%f$HGfR>4TLYa7rNQtNd z8D7#(s-mVt*M!cpjg*{}xbD>#0VfMQYR;h@^q#_VwulGPQSY31pK&?{kLBWgI(o%k z-DEU9m(!&^S?~-aB4deS>lv3!ld<;{?s;A!S*C4_9Z`6evLZy`*G+ZUqIw@%qdKF3 zlC34%W$f8XYMRNmy#sc5(O{!_yWfJpCzPZGIL;}@y&x}~Z#rRrsc>yj)LasG6!VHI z%5EAF)d%?`tMq(vl;Y+Sw|5D+6jv`-YG?hT@DfYoigYOVXFP;o)FZoZlkN#qQJ)1) z8ujYzJu1CD3fD7dol=BYF#;2bbdyYa7M&hhYgdy;-3PvoAEZ^U<7%zvP5D+#uOEb| z)VlYS@_M;cr#1n&S$%phRT6rIPgk%53b!_ki#ldT682okmNGTh*EUWBPPVfjWNN5y z=Cw-6J1iCKGqGzVa_$$IM54qAkf_Ho9V6vlOJjabvX6pIRY9+zr>HaxG58KN+D^S? zY`s`TXAbC^sBpcSq22Md!u2w4S1Hc!6`P>Wwiv6FQ>T*9f*{y09#r1vC58QN%Ql~3Y#sH~KFIU{B z)V&Iva$0t~Oqlk->AIlg?P@gzg=$_2siyvJwQIB5-pP`IXA~rILPc059?vu)dY@5j zuch&K7%1&^s@21mD%yR(Wuuy-B;?}f&H2p%g)R88xEEB>b)P`iwqPeU~g0b*ko^*#i<8H_?=+?pxA|$JAD%|nAl0U z5mPPoT$JYNTl^5oz8h>(?zR|PAlY8U)(gbHHI!P~i6c;+JL*;$+d6i}XDv*vF4dG! z}^ViC5MFyw~m}P12^w^Ua3ysH@;NzYOjmwJ5(dI4YRprcf&8UVp&qkR=C?zfGdF0 zJ=>FRm#?_q zo89zwRUYbot((&wz$w@6?_{hF%FdZ4-iigOHTy_~e*>Hl0QT8s%Qs%qAr-(GaSSp>eqmNX7`nbQ=A8Z=VoHw;rky2dFzPZfoSM(`!{KVzGc zv0H2iyhG;2VX5cC74B4BOk1UMUeSuCSkqHntLINDJj>FdM_`ah-geUID_oCA!X5`s zx8QLJ^)2@(dA<3Tty2FUIF;bXjhi{lsFE=ZiAKB5bdL zYtE3Oyru%&2)~zxbXN&BEy`>X>9|w6b+4t(J`Mcu+R=9L{yiA@e5=@cS6VwGa;%DG zsVH|U+-|9Mi;7~xA~If3+(OI1_fz0z!#g1@N7XQ|=)0uRSnM{#$eVek70nHc;05OY zZDQ91BO?1ZC92P7q$tt$cS}R{{-G{~@xUp`@?$bd?d+$Ne3>O#VqtoOwM9ob>2JEK3yrhQ`$mTX&B=FpGlyiOjAJ9cYK| zF&SY@?>Y8RimHIiJ5P%V(zGnqoG~piuMxn>1h4XEbA``Sc$nHgm?14^8R$eQi)E@3 z>xTV|h`Ar0-vc)Fsdm+;UQyA$15U~4{psT>nTGcPr>QpYBIZH?&oW8&9Ks>*wlu=s z3U^s<4L5*O$>ympdY00kc)!v!S5_n3H_dCJ2+xAK(OEKDdS7X$U2@r7z$tmX$t)vd z%>=mVPrO3>aZ)fQTPo;cX#u-{lY(-K{l5X13c86Sq+r4WDkV#=B@|v}!T$$bD##E? z*%-Y|c~DxQj}fJ)EEJn;{vVTw!fYcb*Q?eSl?3|)QOU?MRn1Tlh3CkQF~mIRPbu6kVjh6$k4;ievUE2aO}1@6*yb_}n)O`BXT(jGS@rg+ zUt0GA56Akc&yv4sraab9)lI0U%HC#ig4BJl)VVE_-)0X_E42*@D!=lZE@iHVycX-k2C37F;cQ0G}-7cR4aC|^&`3lCy1Cy=uNW$nAOnYnGFheTB=*Q!o!qx z)0N_;)1;mfOLZCsoII%yN@-s_1H2ig2&I#ZaE@31!xlUSO(Z-0QK>3SjfnL`KTqMz zV$xf{DG7%JlzfRLQ=M~^S*if_tzjZ?s^QKb zq<($(TWjL2#6u5Z%Jr3s?6DMTBeCKkBVuIg<5Gt{{GxA1PXZ@ftb?`J70xVO%>RI! z-C@!VCE>`GR;4Lt^_Zb@F-PKE6<#XN!w_C!lHSdqkWx-dn;)z2Y86{g>F7&kvKxL! z?3#ima}EIQ;Z$4pa2kmdVCN>xltng0-Jk5rirv5|zgf!1(niM4DS3U+Ojjt!lhSW) z)o>G(o@^6u#q=pdEx#N%^yji_RfqIY=zSGIp9a(suF42ZAG7*ICGfAOq@ntFU$(-F z8&e}f-L)*{y$X415%OGSu6!_t;(V_Z=>t{TAjiLC0)?u{rK$vSfKvkQlM)!KaQbi| zdCq025x*;(Ju7|Lhvb{!FK(8Mkn>FGa}OH>8j3yBjo#we4C8sRWQGwbdOT(%mm+vL zrnGdGvAS(h^&KPm!$mzt-cpn}EU0wEE+e&n?6O*k;XWfVL~ns- zRf^|)MxPLUuE+bUIDl~YxJI%=(KNm^xC#kk^DF-hQq1`Ucmo(FuMQhnjE( k4J5dW>Xgz&{#gj+JSh6j(f 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 M+ntN+j#!=k4+5Y}kN^Mx diff --git a/Release/database/LogInfo.db b/Release/database/LogInfo.db index 429e5e7f37fc34c439495936e3d5e7d9521c9caa..2821df4a589f65639a84edc52ca6adb178593aac 100644 GIT binary patch delta 4509 zcmcInYiv}<6`u9(U7Nd@^$Lb}=YO zZMZuHzwm3F#TblZj0&;i3a{<;WBoSo_rrgh6cvdoJ9l@bNDb;!>YvV?xz`@sn4n7i zb@uGcIp>=*-#O=w%f-2xIrmcT3;L_Poy zh`bN(6L}BZBl0e|OXMAJhsfLDHj%f$Eh2A%n?&9KH;B9rt`m6;TqE)-xJu*|aD~Xr zK)y_VTmqMf90OxSj)GAlN5BY?!(f=mAuvSbAQ&Wa01Ob>5BiDp13!^{ppVF2&`V?w z=pnKjbQ9?VJ|ep!K$q|EhDwvc=HaqmiLmzjR>b^#j_=5}ADIoW*47GJ*4fN9TikoE zJ0yp=bOCY#OR5FL`ux2vEj#xUOHGNl>EP3fMK)IBqe}btg#c^RModB4oLzxSXBhqRaFBmIlwhW z6;r`gX0wlI`%C0)W2)inQVO7;#i(qI%#VK)s zL1wcf6%4Ry3h1Yscau~*l7XKwb|is5R!s!GteOCNSk(!-Syci)RuwUqS6uInGb>HU zP*a8P@wcyKt$!K(23U{GyEQK|dhuL1cY!63zrnvh=TT&8)b=@P=97_kqrNt;;QquF za`C3)#=jYBjqe*5MYKmOHtYooHeQdJn^;>b&ff>$HG}2p_9883Qeu7cQo}MctqIT5 zU~=LSm>H>VfpPkt1f|@AhFnTrhf>v!20Z9|XQ=za8^Xq-y?X7`uZlNpj9m%e!KOKO z_yNf>W{R`ED&7#cnAQ*KC<(hp_zCt9?$pRES0fksHZO#uEQQhyM3Y-G_XAt zA#YvS)essj)l;J$C0tq+`VuO=WeW7Jh8fs4dBRpq)zFlEfm$k1Q?jgFsvw)uMK z-2vBP`)&42?KEP_H2W7h%7Z^I(T)OR;oJDq;7j%by`YlA#Z|%KcI9MgV6Zpfzo;~} zDdi(L`9fB~UI7&!4R$xL6qNc4XtbVg!h8s|cc9@qrQD@7meVEn1hfXG_?3xc`q$cm z{Gx(SayB12Sa|3l4FCn0uHte|;!1jk7Z%+VFOxW{TTodqs_9Tcj(9L>DM#G^RJox}c0_cLp1d zArcAK1FG?cjt(oQyvi3x!>8Q=e^sd0w+{Xk2g;nl`U}xX!G_vL@NHADYqLKH40NH- zD-~A@8;>RM0r(biBL%;h%efmBhV^&Zg-I}D_KxeYQ?Yme3nZX4c}BT+3X){ zm_*0SgG{O6ExU8_cOA$p5R~SAy_WIi%lNZsMq4L|BjbyOqb5$bMWe;xbAti@fbRBF zn1b2yYx^!eN69nsC|&1pmq707;E)Tst4LmEk3V}}ruoT*t7$3ejZ9S8S64QTamY2q zQd@(U#`L`D2Axf~94N^(DlCGjl$@{VT22gk`_yv(5+XMqi@ky2(cp~h z&M37Yj*fq&U!z`0>Xo~_OVukS1XD?PbQn7b3{+#n z1pIA%aJ4};E{etM))lwN$C>eDov zc+jV*Q)Fi(9gwq5Q<<6C>Un-(oNmUECdaAM@xM;fO~enLrm^HnBBlO6#%V6xNE1Wu zT75RYP;Vp;g>?K1R f+9SmjST{chZot6aoP5V5)vs7(cuC)a-!cCMKdd8u delta 191 zcmV;w06_nMpap<{1&|vBg#Z8m6px3A27#8U~Y5@Ewt$O9~1A z000mVVE_;JvkYKM50Ov|vte(Z5CO5WfCNATu?8WN2f$sEfWTmr=D01ti+$qok%7Yu>3ArNm2w}CtXe*=I-L8$-$ diff --git a/Release/database/XNSim.db b/Release/database/XNSim.db index 3196127f0f850c1120052cf67f2415a3f01eeb02..b7205ce37dc6c3b47b8cc50757b94a9da1633d35 100644 GIT binary patch delta 225 zcmZp8;MMTJYl1YR;zSu|M#aX2tqF`v{6#o8H!$$+;ZxvM;r_zS%C(hCk8{IjL4g^Z zhBdJql8WN8@$upYdd6mY#zqE4rn&}Zx<=-SIRzPs1{PMPCRT<9Pj>8z@N>;e&&-=1 z7saT;3TMhs-w?&f+O8MHxLq%b>DpB0SRU@_>>rpGGx2b5U-f}0o|~JCS&|WAcx=1a wA0{AX24WTj?f~#FG zigCMM6w|e-%rQJ-)7d{TE#AK715-Tr!~ovu+<%xj+vWc-0WmWWvj8zG5VHX>I}mdK dF-V>Zh`E872Z(urm=B2gfmmR>{2#%Gn*pYwG}Hh9 diff --git a/XNCore/XNScenarioManager.cpp b/XNCore/XNScenarioManager.cpp index 8307724..57ba726 100755 --- a/XNCore/XNScenarioManager.cpp +++ b/XNCore/XNScenarioManager.cpp @@ -237,7 +237,7 @@ bool XNScenarioManager::ParseConfig(const std::string &ConfigID) // 执行查询 if (sqlite3_step(stmt) != SQLITE_ROW) { - LOG_ERROR("A01082014:未在数据库中找到配置ID为 %1 的记录", ConfigID); + LOG_ERROR("A01082014:未在数据库中找到构型ID为 %1 的记录", ConfigID); sqlite3_finalize(stmt); sqlite3_close(db); return false; diff --git a/XNEngine/XNEngine.cpp b/XNEngine/XNEngine.cpp index 4c75db3..e899733 100755 --- a/XNEngine/XNEngine.cpp +++ b/XNEngine/XNEngine.cpp @@ -63,35 +63,34 @@ bool XNEngine::ParseConfig(const std::string &XmlPath) if (index != std::string::npos) { std::string suffix = XmlPath.substr(index); if (suffix != ".xml" && suffix != ".sce") { - std::cerr << "0x1005 配置文件不是 .xml 或 .sce 文件, 引擎将退出!" << std::endl; + std::cerr << "A02012006: 构型配置文件不是 .xml 或 .sce 文件, 引擎将退出!" << std::endl; return false; } } else { - std::cerr << "0x1006 配置文件没有 .xml 或 .sce 的后缀名, 引擎将退出!" << std::endl; + std::cerr << "A02012007: 构型配置文件没有后缀名, 引擎将退出!" << std::endl; return false; } // 打开配置文件 std::ifstream file(XmlPath); if (!file.is_open()) { - std::cerr << "0x1007 打开配置文件失败, 引擎将退出!" << std::endl; + std::cerr << "C02012008: 打开构型配置文件失败, 引擎将退出!" << std::endl; return false; } // 解析配置文件 tinyxml2::XMLDocument doc; if (doc.LoadFile(XmlPath.c_str()) != tinyxml2::XML_SUCCESS) { - std::cerr << "0x1008 解析配置文件失败, 引擎将退出!" << std::endl; + std::cerr << "C02012009: 解析构型配置文件失败, 引擎将退出!" << std::endl; return false; } // 获取根元素 tinyxml2::XMLElement *root = doc.FirstChildElement("Scenario"); if (!root) { - std::cerr << "0x1009 配置文件中未找到 Scenario 根元素, 引擎将退出!" << std::endl; + std::cerr << "A02012010: 构型配置文件中未找到 Scenario 根元素, 引擎将退出!" << std::endl; return false; } // 顺便读取一下CPU亲和性 int cpus = sysconf(_SC_NPROCESSORS_ONLN); - std::cout << "当前CPU核心数-> " << cpus << std::endl; // 设置CPU亲和性 cpu_set_t mask; @@ -114,24 +113,24 @@ bool XNEngine::ParseConfig(const std::string &XmlPath) CPU_SET(index, &mask); } } catch (const std::exception &e) { - std::cerr << "0x1010 无效的CPU亲和性值: " << cpuIndex << std::endl; + std::cerr << "A02013011: 无效的CPU亲和性值: " << cpuIndex << std::endl; } } } } if (sched_setaffinity(0, sizeof(mask), &mask) == -1) { - std::cerr << "0x1011 设置引擎CPU亲和性失败-> " << strerror(errno) << std::endl; + std::cerr << "C02012012: 设置引擎CPU亲和性失败-> " << strerror(errno) << std::endl; return false; } - std::cout << "成功设置引擎CPU亲和性-> " << CPUAffinity << std::endl; + std::cout << "D02014013: 成功设置引擎CPU亲和性-> " << CPUAffinity << std::endl; // 锁定内存 if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) { - std::cerr << "0x1012 锁定引擎内存失败-> " << strerror(errno) << std::endl; + std::cerr << "C02012014: 锁定引擎内存失败-> " << strerror(errno) << std::endl; return false; } - std::cout << "成功锁定引擎内存!" << std::endl; + std::cout << "D02014015: 成功锁定引擎内存!" << std::endl; // 获取配置文件中的日志元素 bool isDebug = false; @@ -141,7 +140,7 @@ bool XNEngine::ParseConfig(const std::string &XmlPath) // 获取配置文件中的控制台输出元素 tinyxml2::XMLElement *consoleOutputNode = root->FirstChildElement("ConsoleOutput"); if (!consoleOutputNode) { - std::cout << "0x1013 配置文件中未找到 ConsoleOutput 元素, 控制台将输出所有日志!" + std::cout << "A02013016: 构型配置文件中未找到 ConsoleOutput 元素, 控制台将输出所有日志!" << std::endl; } else { // 获取配置文件中的调试日志输出元素 @@ -193,7 +192,7 @@ bool XNEngine::ParseConfig(const std::string &XmlPath) tinyxml2::XMLElement *logNode = root->FirstChildElement("Log"); if (!logNode) { - std::cout << "0x1014 配置文件中未找到 Log 元素, 日志文件将记录所有日志!" << std::endl; + std::cout << "A02013017: 配置文件中未找到 Log 元素, 日志文件将记录所有日志!" << std::endl; } else { // 获取配置文件中的调试日志输出元素 const char *debugLog = logNode->Attribute("Debug"); @@ -434,7 +433,7 @@ bool XNEngine::Run(const std::string &XmlPath, const uint32_t InitializeType) bool ret = framework->Initialize(InitializeType); // 如果初始化失败 if (!ret) { - LOG_ERROR("0x1012 初始化失败, 引擎将退出!"); + LOG_ERROR("B02012018: 引擎初始化失败, 引擎将退出!"); // 返回失败 return false; } @@ -442,18 +441,18 @@ bool XNEngine::Run(const std::string &XmlPath, const uint32_t InitializeType) // 设置框架状态 frameworkStatus = XNFrameObjectStatus::Initialized; // 记录信息日志 - LOG_INFO("引擎初始化成功!"); + LOG_INFO("D02014019: 引擎初始化成功!"); // 如果测试模式 if (isTestMode) { // 记录信息日志 - LOG_INFO("引擎测试通过!"); + LOG_INFO("D02014020: 引擎测试通过!"); // 返回成功 return true; } ret = framework->PrepareForExecute(); // 如果准备执行失败 if (!ret) { - LOG_ERROR("0x1013 准备执行失败, 引擎将退出!"); + LOG_ERROR("B02012021: 引擎准备执行失败, 引擎将退出!"); // 返回失败 return false; } @@ -477,6 +476,7 @@ bool XNEngine::Run(const std::string &XmlPath, const uint32_t InitializeType) if (engineStatusWriter) { // 设置引擎运行标志 engineRunning = true; + //主线程循环发送运行状态 while (engineRunning) { // 发布一次初始状态 PublishEngineStatus(); @@ -491,20 +491,21 @@ bool XNEngine::Run(const std::string &XmlPath, const uint32_t InitializeType) } } else { // 记录错误日志 - LOG_ERROR("0x1014 无法发送引擎运行状态, 引擎将退出!"); + LOG_ERROR("B02012022: 无法发送引擎运行状态, 引擎将退出!"); + return false; } // 返回成功 return true; } -// 运行引擎 +// 解析数据库 bool XNEngine::ParseDataBase(const std::string &ConfigId) { // 获取数据库路径 std::string dbPath = std::getenv("XNCore"); if (dbPath.empty()) { - LOG_ERROR("0x1015 未设置XNCore环境变量, 引擎将退出!"); + LOG_ERROR("A02012023: 未设置XNCore环境变量, 引擎将退出!"); return false; } dbPath += "/database/XNSim.db"; @@ -512,7 +513,7 @@ bool XNEngine::ParseDataBase(const std::string &ConfigId) // 打开数据库 sqlite3 *db; if (sqlite3_open(dbPath.c_str(), &db) != SQLITE_OK) { - LOG_ERROR("0x1016 打开数据库失败: %1", sqlite3_errmsg(db)); + LOG_ERROR("C02012024: 打开数据库失败: %1", sqlite3_errmsg(db)); return false; } @@ -520,7 +521,7 @@ bool XNEngine::ParseDataBase(const std::string &ConfigId) std::string sql = "SELECT * FROM Configuration WHERE ConfID = ?"; sqlite3_stmt *stmt; if (sqlite3_prepare_v2(db, sql.c_str(), -1, &stmt, nullptr) != SQLITE_OK) { - LOG_ERROR("0x1017 准备SQL语句失败: %1", sqlite3_errmsg(db)); + LOG_ERROR("C02012025: 准备SQL语句失败: %1", sqlite3_errmsg(db)); sqlite3_close(db); return false; } @@ -528,7 +529,7 @@ bool XNEngine::ParseDataBase(const std::string &ConfigId) // 绑定参数 int configIdInt = std::stoi(ConfigId); if (sqlite3_bind_int(stmt, 1, configIdInt) != SQLITE_OK) { - LOG_ERROR("0x1018 绑定参数失败: %1", sqlite3_errmsg(db)); + LOG_ERROR("C02012026: 绑定参数失败: %1", sqlite3_errmsg(db)); sqlite3_finalize(stmt); sqlite3_close(db); return false; @@ -536,14 +537,13 @@ bool XNEngine::ParseDataBase(const std::string &ConfigId) // 执行查询 if (sqlite3_step(stmt) != SQLITE_ROW) { - LOG_ERROR("0x1019 未找到配置ID为%1的记录", ConfigId); + LOG_ERROR("A02012027: 未找到构型ID为%1的记录", ConfigId); sqlite3_finalize(stmt); sqlite3_close(db); return false; } int cpus = sysconf(_SC_NPROCESSORS_ONLN); - std::cout << "当前CPU核心数-> " << cpus << std::endl; // 设置CPU亲和性 cpu_set_t mask; @@ -564,22 +564,22 @@ bool XNEngine::ParseDataBase(const std::string &ConfigId) CPU_SET(index, &mask); } } catch (const std::exception &e) { - std::cerr << "0x1010 无效的CPU亲和性值: " << cpuIndex << std::endl; + std::cerr << "A02013028: 无效的CPU亲和性值: " << cpuIndex << std::endl; } } if (sched_setaffinity(0, sizeof(mask), &mask) == -1) { - std::cerr << "0x1011 设置引擎CPU亲和性失败-> " << strerror(errno) << std::endl; + std::cerr << "C02012029: 设置引擎CPU亲和性失败-> " << strerror(errno) << std::endl; return false; } - std::cout << "成功设置引擎CPU亲和性-> " << CPUAffinity << std::endl; + std::cout << "D02014030: 成功设置引擎CPU亲和性-> " << CPUAffinity << std::endl; // 锁定内存 if (mlockall(MCL_CURRENT | MCL_FUTURE) == -1) { - std::cerr << "0x1012 锁定引擎内存失败-> " << strerror(errno) << std::endl; + std::cerr << "C02012031: 锁定引擎内存失败-> " << strerror(errno) << std::endl; return false; } - std::cout << "成功锁定引擎内存!" << std::endl; + std::cout << "D02014032: 成功锁定引擎内存!" << std::endl; auto readBoolean = [](sqlite3_stmt *stmt, int column) -> bool { return sqlite3_column_int(stmt, column) != 0; diff --git a/XNEngine/main.cpp b/XNEngine/main.cpp index 38bafd9..9901266 100755 --- a/XNEngine/main.cpp +++ b/XNEngine/main.cpp @@ -23,8 +23,8 @@ int main(int argc, char *argv[]) { XNEngine engine; //检测输入参数个数 - if (argc <= 2) { - std::cerr << "0x1000 输入参数太少!" << std::endl; + if (argc <= 1) { + std::cerr << "A02012001: 输入参数太少! 使用 -h 查看帮助." << std::endl; return -1; } @@ -33,6 +33,19 @@ int main(int argc, char *argv[]) bool hasConfigPath = false; bool hasConfigId = false; + std::string arg = argv[1]; + if ("-h" == arg) { + std::cout << "-f\t\t指定构型配置文件路径, 不可与-id参数同时使用" << std::endl; + std::cout << "-id\t\t指定构型ID, 不可与-f参数同时使用" << std::endl; + std::cout << "-test\t\t\t指定测试模式" << std::endl; + std::cout << "-h\t\t\t查看帮助" << std::endl; + std::cout << "-v\t\t\t查看版本" << std::endl; + return 0; + } else if ("-v" == arg) { + std::cout << "XNEngine v1.0.0" << std::endl; + return 0; + } + //检查是否包含-f和-id参数 for (int i = 1; i < argc;) { std::string arg = argv[i]; @@ -42,7 +55,8 @@ int main(int argc, char *argv[]) hasConfigPath = true; i += 2; } else { - std::cerr << "0x1001 在-f参数后,未指定配置文件路径,引擎将退出!" << std::endl; + std::cerr << "A02012002: 在-f参数后, 未指定构型配置文件路径, 引擎将退出!" + << std::endl; return -1; } } else if ("-id" == arg) { @@ -51,22 +65,21 @@ int main(int argc, char *argv[]) hasConfigId = true; i += 2; } else { - std::cerr << "0x1002 在-id参数后,未指定配置ID,引擎将退出!" << std::endl; + std::cerr << "A02012003: 在-id参数后, 未指定构型ID, 引擎将退出!" << std::endl; return -1; } } else if ("-test" == arg) { engine.SetTestMode(true); i++; } else { - std::cerr << "0x1003 无法识别的参数 " << arg << " ,引擎将退出!" << std::endl; + std::cerr << "A02012004: 无法识别的参数 " << arg << " , 引擎将退出!" << std::endl; return -1; } } //检查是否同时包含-f和-id参数 if (hasConfigPath && hasConfigId) { - std::cerr << "0x1004 请指定 -f 或 -id ,但不要同时指定!" - << std::endl; + std::cerr << "A02012005: 请不要同时使用 -f 和 -id 参数, 引擎将退出!" << std::endl; return -1; }