diff --git a/.github/workflows/Run Testcases.yml b/.github/workflows/Run Testcases.yml index 580ddc3..b098837 100644 --- a/.github/workflows/Run Testcases.yml +++ b/.github/workflows/Run Testcases.yml @@ -15,7 +15,7 @@ on: - '**.svg' - '**.json' - '**.yml' - + # Also add paths-ignore for pull requests pull_request: branches: @@ -43,6 +43,14 @@ jobs: # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it - uses: actions/checkout@v3 + - uses: NEVSTOP-LAB/InstallNevstopPackage@main + with: + LabVIEW_Version: 2017 + NEVSTOP-FTP-IP: ${{ secrets.VIPM_FTP_IP }} + NEVSTOP-FTP-PORT: ${{ secrets.VIPM_FTP_PORT }} + PackageName: Communicable-State-Machine + PackageName2: CSM-API-String-Arguments-Support + - name: Run lvCICD Test cases with VITester id: StartVITester uses: NEVSTOP-LAB/lvCICD@main diff --git a/CSM INI Static Variable Support.vipb b/CSM INI Static Variable Support.vipb index 79c6c71..8229cfa 100644 --- a/CSM INI Static Variable Support.vipb +++ b/CSM INI Static Variable Support.vipb @@ -1,7 +1,7 @@ - + NEVSTOP_lib_CSM_INI_Static_Variable_Support - 2025.11.0.1 + 2026.1.0.1 false . vip @@ -40,9 +40,10 @@ NEVSTOP https://github.com/NEVSTOP-LAB/CSM-INI-Static-Variable-Support - [update] update INIViewer Tool -[fix] #87 improve performance of "Sync to File.vi". -[fix] #92 fix path issue of built exe + [add] #95 add API: "CSM - Load Configuration Variables From String.vi" +[update] update tool icon +[fix] #94 INI-Viewer window is not opened after clicked in tool launcher. + diff --git a/CSM Tool/CSM-INI Variable Viewer - DebugTool.vi b/CSM Tool/CSM-INI Variable Viewer - DebugTool.vi index 48d7866..c838897 100644 Binary files a/CSM Tool/CSM-INI Variable Viewer - DebugTool.vi and b/CSM Tool/CSM-INI Variable Viewer - DebugTool.vi differ diff --git a/Example/1. Used as parameters parsed by CSM.vi b/Example/1. Used as parameters parsed by CSM.vi index b1c92b9..c7e8e6b 100644 Binary files a/Example/1. Used as parameters parsed by CSM.vi and b/Example/1. Used as parameters parsed by CSM.vi differ diff --git a/Example/2. Load the corresponding configuration by providing the prototype.vi b/Example/2. Load the corresponding configuration by providing the prototype.vi index 959de27..538ed62 100644 Binary files a/Example/2. Load the corresponding configuration by providing the prototype.vi and b/Example/2. Load the corresponding configuration by providing the prototype.vi differ diff --git a/Example/3. In CSM API parameters.vi b/Example/3. In CSM API parameters.vi index 529b98c..e2f4708 100644 Binary files a/Example/3. In CSM API parameters.vi and b/Example/3. In CSM API parameters.vi differ diff --git a/Example/4. Multi-file configuration system.vi b/Example/4. Multi-file configuration system.vi index 02328d6..05066c4 100644 Binary files a/Example/4. Multi-file configuration system.vi and b/Example/4. Multi-file configuration system.vi differ diff --git a/Example/5. import Config.ini with include section.vi b/Example/5. import Config.ini with include section.vi index baff924..91051df 100644 Binary files a/Example/5. import Config.ini with include section.vi and b/Example/5. import Config.ini with include section.vi differ diff --git a/Example/6. Read Nested Variables.vi b/Example/6. Read Nested Variables.vi index 955a4c1..805aebb 100644 Binary files a/Example/6. Read Nested Variables.vi and b/Example/6. Read Nested Variables.vi differ diff --git a/Example/7. Write and Read Configuration.vi b/Example/7. Write and Read Configuration.vi index 99d35cf..90bc758 100644 Binary files a/Example/7. Write and Read Configuration.vi and b/Example/7. Write and Read Configuration.vi differ diff --git a/Example/8. import Configuration From String.vi b/Example/8. import Configuration From String.vi new file mode 100644 index 0000000..e5c8291 Binary files /dev/null and b/Example/8. import Configuration From String.vi differ diff --git a/INI-Static-Variable-Support/As String.mnu b/INI-Static-Variable-Support/As String.mnu index 7c69eaf..f8dc5e6 100644 Binary files a/INI-Static-Variable-Support/As String.mnu and b/INI-Static-Variable-Support/As String.mnu differ diff --git a/INI-Static-Variable-Support/CSM - Configuration File Path.vi b/INI-Static-Variable-Support/CSM - Configuration File Path.vi index 2a6df12..3d62445 100644 Binary files a/INI-Static-Variable-Support/CSM - Configuration File Path.vi and b/INI-Static-Variable-Support/CSM - Configuration File Path.vi differ diff --git a/INI-Static-Variable-Support/CSM - Load Configuration Variables From File.vi b/INI-Static-Variable-Support/CSM - Load Configuration Variables From File.vi index d656450..a179e87 100644 Binary files a/INI-Static-Variable-Support/CSM - Load Configuration Variables From File.vi and b/INI-Static-Variable-Support/CSM - Load Configuration Variables From File.vi differ diff --git a/INI-Static-Variable-Support/CSM - Load Configuration Variables From String.vi b/INI-Static-Variable-Support/CSM - Load Configuration Variables From String.vi new file mode 100644 index 0000000..511bca8 Binary files /dev/null and b/INI-Static-Variable-Support/CSM - Load Configuration Variables From String.vi differ diff --git a/INI-Static-Variable-Support/CSM - Mark All Temp Variables as Permanent.vi b/INI-Static-Variable-Support/CSM - Mark All Temp Variables as Permanent.vi index de418f4..fb8d223 100644 Binary files a/INI-Static-Variable-Support/CSM - Mark All Temp Variables as Permanent.vi and b/INI-Static-Variable-Support/CSM - Mark All Temp Variables as Permanent.vi differ diff --git a/INI-Static-Variable-Support/Convert API String to Cluster(Default in Session).vim b/INI-Static-Variable-Support/Convert API String to Cluster(Default in Session).vim index 815c8ec..aae3d21 100644 Binary files a/INI-Static-Variable-Support/Convert API String to Cluster(Default in Session).vim and b/INI-Static-Variable-Support/Convert API String to Cluster(Default in Session).vim differ diff --git a/INI-Static-Variable-Support/INI-Static-Variable-Support.lvlib b/INI-Static-Variable-Support/INI-Static-Variable-Support.lvlib index 3b75705..4578e2b 100644 --- a/INI-Static-Variable-Support/INI-Static-Variable-Support.lvlib +++ b/INI-Static-Variable-Support/INI-Static-Variable-Support.lvlib @@ -42,7 +42,7 @@ - + @@ -50,6 +50,7 @@ + diff --git a/INI-Static-Variable-Support/LabVIEW-Config/Open.vi b/INI-Static-Variable-Support/LabVIEW-Config/Open.vi index 80e7429..73727ea 100644 Binary files a/INI-Static-Variable-Support/LabVIEW-Config/Open.vi and b/INI-Static-Variable-Support/LabVIEW-Config/Open.vi differ diff --git a/INI-Static-Variable-Support/_Support/CSMSVMgr/CSM-Static-Variable-Manager.lvclass b/INI-Static-Variable-Support/_Support/CSMSVMgr/CSM-Static-Variable-Manager.lvclass index cdc066c..9c5e2f6 100644 --- a/INI-Static-Variable-Support/_Support/CSMSVMgr/CSM-Static-Variable-Manager.lvclass +++ b/INI-Static-Variable-Support/_Support/CSMSVMgr/CSM-Static-Variable-Manager.lvclass @@ -16,7 +16,7 @@ true true true - &Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!#@M5F.31QU+!!.-6E.$4%*76Q!!)WA!!!3%!!!!)!!!)UA!!!"+!!!!!C&*4EEN5X2B>'FD,6:B=GFB9GRF,6.V=("P=H1O<(:M;7)D1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S,GRW9WRB=X-!!!!!!+!8!)!!!$!!!#A!"!!!!!!%!!-!0!#]!"^!!!)!!!!!!1!"!!<`````!!!!!!!!!!!!!!!!&XGE(>U;5EW@7GKL]-E'>Q!!!!Q!!!!1!!!!!#PUZ9(2;YZ$K5R;:3G3P[\5(9T:DQ#S"/G!#:DM_%*_!!!1!!!!!!![ZIJ%[C+D1:R]MG0@<KX=!1!!!0`````5(9T:DQ#S"/G!#:DM_%*_!!!!%(L=A_\VAW)L/HFM6(E=\.Y!!!!%!!!!!!!!!/Y!!5R71U-!!!!$!!*735R#!!!!!&"53$!!!!!&!!%!!1!!!!!#!!*735.$!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<&"53$!!!!!C!!%!"A!!!!!/4'&C6EF&6SV$<WZG;7=+1W^O:GFH,G.U<!!!!!!!!5)!!!!!!!*735.$!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!"16%AQ!!!!*1!"!!9!!!!!$ERB9F:*26=N1W^O:GFH$5RJ<G65<WNF<CZD>'Q!!!!!!!*#!!!)!!!$!!!!!!!#!!-!!!!!!#A!!!!C?*RDY'2A;7#YQ!$%D!R-$6R!&J-'!ZBG_-$!Q-(!!!#%/A?(!!!!&!!!!"2YH'0A9/"FY%#"$!!$A1"/!!!!4!!!!2BYH'.AQ!4`A1")-4)Q-(U$UGRIYG!;RK9GQ'5O,LOAYMR!T!,%L$"BI,PX!'EGE$B5D3D9/QR-$Y$Y",IZ`&$[!:)9!,D0+6Q!!!!-!!&73524!!!!!!!$!!!"LQ!!!Z2YH.P!S-#1;7RBRM$%Q-!-:)MT.$!EZ[?E]D)!_1Q1I!.D5!!#I/:JI9E<(DC="A2[`0)N9(\T'ZZO&R7"ZBI6#;:3E7Y@&:&/(R774B;6&X`_```@@)4H=,>(TH&('Z$;<A[A_(%8&1Y1"UCTA/D`A2EA6;DGS81#:9'U"*)'O)%I^A=!68%U6#ATF,!9(IA[@,T"B"(C5*A4IL#ZFXDTG^^Q!$UF=0!B3X?D"J$@/R&%!I6Y/E-Y*)[\=/C)!@G-*U!'>P,!@-U"^U]9S)!3&9&/%Z"&,)QQC\L:DDNIA-0"112#:5#I#AB6!+*WA&VQB#0O-$T]V\[_NYM63,-BR9E$%$?!'%SI7)_"E9%2T'2E7!N6;Q.E-U(&9(%,9CN!AYW2Q2[OZT:58A0*(">'G"[%OGIE>T#"T7"E_--!-Q^I(V20!^4>)$&@I.A"+$M%S*Y!:5=$W2_A\#1A7Q$+TA3S$2AB\$QI'WQ:!W\;W>`&&3G9Q0E#FD55A4AZN]$!1+_[/E!HWF!H/":%JDL:G.D&[DD6[I4JB.5#V3C!V"5EF_&4"A#`&JT*!!!!!B1!!!-)?*RT9'"AS$3W-%NA9G"A:G2A%'>I9%D/4UFF1!)HG"BQAN$A],$G.S\>,CI2H3YK$NU_+D'>0CIW1,9&E$<J:ODG".)MH3QK,`\]``_`^1$`F!0]L4?"/I&;,(I^7)#S&E">*MU(7=!;(&B;$Z1)>BNUMQ(.-!"CD?:D,+^&DA-:)0O!N!').DT1?;S<M`6EC83X:4?`Z=(/Q\6M10U'H;?<D\.IHA$J?]U&6XS\^8;>*L_]#^"7NGZ_:!=V`W!M^1"K!6LCX8K\`A(162JA2Z:;>)=!(?D%!D3+!_1>:%='M<2?+F(K.OI7[QR2E1&C%:!D69''A<SX\5$T%:?Y_/D9QU!(C%">,1.WS#8$<^W7L@_"LL<PVL?]WHE:[/I=I!GP1;Z_"4,I.4^=]?X8T/ZO1&@6=83R7<'8,HH^M@53`Z2$*;T]WQ[^HA.U(A@%?2;^DC$+J+'3B9&`[M''+B"VK//#Q1G$5S8=)/>]9(S:#@1MU(-/P2[]1#_!)MKG.Z!8;+..NQ.PNS=PFFASBGNB17BBA7BB[@:EQ>3S\=1/9"JCY(=^_0,HP```A=SVL_`N9A<3D%BJRA')G2FYQ7+AJ+5.&6>CE)#,\9'+&1.&G+"C&[''A.AM4!CT1-$:X]560=W#F#M#=8*OA9'"8H6VA%[UI5ZQ,)B-><)RM9P6=;L6#>-*KQ7K!1#U\?=0!!!"V1!!!P"YH(.A9'$).,9Q%W"C9'"G:'!1:WBA3-Z0376!!FO9'(##Y0#QZD=_X4%K-:UR+B\>.3I*H45K,E#W!Z#W[79'ECS>,#IP`PT``\`T7/MX`N:YI#W^TCS>,CI/T=>:Q+K+76K`F1BWG`7[A92.OPE[@61M8H->>V'R!.FB?,+<P@6!Z[%3FG["<C(,CS6GP5!:I%I>)+U$J(G!JH!!6<-Q!V5@:V%";1,<W(K!P`5^E.-.MA6I2AFL.U0T!:!F"NV!+Y$7;,3?L0-#MEXYZ2N!WLIZA:)MH4T),FY,%A=K;4\)!N2BUAX5$4-E2%8$KR.)N&[K0QKW"/CL8A_1-LDH(%!5"]B5I!M&'%%O",K9%?*3&JB,14;6OC.J"VJIURP)!D4=JMO"J=/2"3DHU?P"#Z4T!-KZ."]%-6W[(5!53B#8=(:_;$\C%R=@@2CCBQ7BBQ7CBQ6:$T#18![]0AO*T\7P\_VC!^+-3((M!-2:1"'1'#AJX)++ZS+*O5!V^$!9A-6!?#J581G1RQ26VQV6"W,PB\*TE-T2A/K*1"+<B?1/%($W>X&&4Z]AN1J!H&S18+:882WA%WWI%RQ,)F/><%TM9H7=;H8#>-*K!?!QQC1!!!!!!!!-&Q#!"1!!"$%X,D!!!!!!$"=!A!!!!!1R.SYQ!!!!!!Q8!)!&!!!%-4=O-!!!!!!-&Q#!!!!!"$%X,D!!!!!!$"=!A!5!!!1R.SYQ!!!!!"1"!!!!^6=VAHEGIIQO=V*/"EEZH1!!!!U!!!!!!!!!!!!!!!!!!!!!!!!!A0````_!!!!"DK2/Y:#GU*'-J6<BAE23E:R%4J'!!!!"`````Y!!!!'!!!!"A!,!!9!)-!'!)!Q"A)!$!9!!!Q'!9!Y"A(A_!9"_`A'!@`Y"A(`_!9"``A'!@`Y"A(`_!9$``_'!(`XZA!`XY9!$X]'!!(]"A!!]!9!!!!(`````!!!#!.X>X>X>X>X>X>X>X>X>X>X4-T-T-T-T-T-T-T-T-T-^UT0`]`0T0T-`-``T``-T0>-`-T0T]T`T`T]T-`-`-TX4-`]T]`-`0T]`0`0`]T-^UT-T]T]T0T-`0T0T]T]T0>-``T-`-T]T0T0`]`-`-TX4-T-T-T-T-T-T-T-T-T-^X>X>X>X>X>X>X>X>X>X>X>!!!!!!!!!!!!!!!!!!!!X1!!!!!!!!!!!!!!!!!!!.U!!!!!!!!+KK!!!!!!!!$>!!!!!!!+IT-[I!!!!!!!X1!!!!!+IT-T-TKA!!!!!.U!!!!+IT-T-T-T/K!!!!$>!!!!#K-T-T-T-T_A!!!!X1!!!!KKIT-T-T``I!!!!.U!!!!+KKKD-T```[!!!!$>!!!!#KKKKKL```_A!!!!X1!!!!KKKKKP````I!!!!.U!!!!+KKKKL````[!!!!$>!!!!#KKKKK````_A!!!!X1!!!!KKKKKP````I!!!!.U!!!!+KKKKL````[!!!!$>!!!!#KKKKK````KP`Q!!X1!!!!#KKKKP``KK````!.U!!!!!!+KKL`KK````!!$>!!!!!!!!KKKD````]!!!X1!!!!!!!!#D````]!!!!.U!!!!!!!!!!!``]!!!!!$>!!!!!!!!!!!!!!!!!!!!X>X>X>X>X>X>X>X>X>X>X>!!!%!(N\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$XN\$Q]0````$`]0`Q]0`Q]0$`]0$````Q````]0$Q]0?XM0$`]0$Q]0`Q``$Q```Q```Q``$Q]0$`]0$`]0$Q^\?Q]0$```$Q``$`]0$`]0`Q``$`]0``]0````$Q]0$XN\$Q]0$Q``$Q``$Q]0`Q]0$`]0`Q]0`Q``$Q``$Q]0?XM0$````Q]0$`]0$Q``$Q]0`Q]0````$`]0$`]0$Q^\?Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"\?Q!!!!!!!!!!!!!!!!!!#!A!!!!!!!!!!!!!!!!!!(N\!!!!!!!!!!!!!!!!#'1[:'1)!!!!!!!!!!!!!!!!?XM!!!!!!!!!!!!!#'1[$Q]0$W2E#!!!!!!!!!!!!!"\?Q!!!!!!!!!!#'1[$Q]0$Q]0$Q^E:!A!!!!!!!!!!(N\!!!!!!!!!'1[$Q]0$Q]0$Q]0$Q]0:'1!!!!!!!!!?XM!!!!!!!!!/DI0$Q]0$Q]0$Q]0$Q`_:!!!!!!!!!"\?Q!!!!!!!!![:'1[$Q]0$Q]0$Q`_`PY[!!!!!!!!!(N\!!!!!!!!!$JE:'2E/A]0$Q`_`P\_`DI!!!!!!!!!?XM!!!!!!!!!/G2E:'2E:$JE`P\_`P\_/A!!!!!!!!"\?Q!!!!!!!!![:'2E:'2E:0\_`P\_`PY[!!!!!!!!!(N\!!!!!!!!!$JE:'2E:'2E`P\_`P\_`DI!!!!!!!!!?XM!!!!!!!!!/G2E:'2E:'4_`P\_`P\_/A!!!!!!!!"\?Q!!!!!!!!![:'2E:'2E:0\_`P\_`PY[!!!!!!!!!(N\!!!!!!!!!$JE:'2E:'2E`P\_`P\_`DI!!!!!!!!!?XM!!!!!!!!!:'2E:'2E:'4_`P\_`PZE:+SML!!!!!"\?Q!!!!!!!!!!/DJE:'2E:0\_`PZE:$KML+SML+Q!!(N\!!!!!!!!!!!!!$JE:'2E`PZE:$KML+SML+Q!!!!!?XM!!!!!!!!!!!!!!!![:'2E:!_ML+SML+SM!!!!!!"\?Q!!!!!!!!!!!!!!!!!!/A_ML+SML+SM!!!!!!!!!(N\!!!!!!!!!!!!!!!!!!!!!!#ML+SM!!!!!!!!!!!!?XM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XM!!!&+!!&'5%B1!!!!!A!#6%2$1Q!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<&"53$!!!!!C!!%!"A!!!!!/4'&C6EF&6SV$<WZG;7=+1W^O:GFH,G.U<!!!!!!!!%)!!!!!!!!!!1!!!%V16%AQ!!!!,!!"!!9!!!!!$ERB9F:*26=N1W^O:GFH&%RB9F:*26=N1W^O:GFH,GRW<'FC!!*52%.$!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!"16%AQ!!!!*1!"!!9!!!!!$ERB9F:*26=N1W^O:GFH$5RJ<G65<WNF<CZD>'Q!!!!!!!"#!!!)!!!!!!%!!!&)5&2)-!!!!#Q!!1!'!!!!!!Z-97*73568,5.P<G:J:R2-97*73568,5.P<G:J:SZM>GRJ9A!$!!!!!!F1!!!>RHC=T6FN<&08'8\0^5VSH4D*N9-*,EZM*T=G>!G+;%IBWQIDJI8Q5>LQM<:4WR!\Y$7*C_/E]'-F5[RIG6:NUS<W)68KDQVJ0S:_Z%?VF7Y1'=LG([X1.+HNJ,2I-%W>.C;6U4&O\NZTLO`X4?RF6+ID(<HO_X(/]T\H?=]Z!,1MC/OY*8B&"C,?RC`\:+B.&AF!I6O!UC=_#_*B]B]A;U*%BBX#9@%$<IG%:@!FCX'B*T%(N^";?5?:]PQ"`CV_B+<69AC$V=L1G#`#D`Q$UK)IH1^,=V6;W#;)C+_3*?[L5O3/]'I_AREBXUF(@T>:!J+)]8S_\?$1?#IPU6_^X5+)R@4+)#;+^6FJ=1.'R.Q,,#4*?DYB-VJ)Q*#>-$]`<TDZ6;=YG]:7^0&]!M"8E?Q+0I&%M76#7ORC0L8-BW42JZ1H%6H[!:U\><+\.C7+)LKCX[H3EKGPZC@P9(\8LV^(0RR,@C>E7#-N\B2#QE@*^[PKH]S`!12)Y8F")=L0U0]\`A/U$-QWA*71CK3DDYC$_*_$-DS9,X)P!%6971,A-K3(F9,83P%F6IL(7#G]C4E2D&L]P%QN%HSBL;6`>()CF]J'-S02Y>'BC9HI3^HUV&!O&5U/Z9;=6@JSIBB[B#*!ET''1$0QX"DJ-C/?A80HTC%)/"KOD[*LM\3I_T8B=E\C=D45EQ<K.+O"XH:%,`(JI?-5Q9Y_4C/OBR&X0RX*/0P_3Y0%GZ(%@N%_21O*(`Y-3,Q&O@7+H=3>X"'S<16#0K)['34GDC!URUHH#DZ<U??-G=39IR.^NJ5H]49(C;GPD=2HTZ[V_'%:_H13]Y3I*-[`K^R4\F%KHV2_T@W44$%K?ZD(!N9$.5=EG)4-9**>G-2#X>]M4^W2F3M1L1;6PO+2I7R[[.BIKPOR^'BK`^",NJ*AFIO9:4KU76KMMX#W'C[3O*<F8V;MV#TZ'%TX]HG*`G+O]35<DY/9=-%IVBV8X"'`"=3PYWHI?!93H`L_LJ,:%Z`VF#Q7E-5;8H!*;4.DQYPEFM@L;)6YV6/9_D0D)_HD<G#2S@M-&JF;(6DE:2?Q?!/M*'Z]K2CDKPA0D(C*3!QKDV<UQ73RG6#E%O=D!V;I?MN!R:7AKN[@'MNE4^MQ'J3*K#JS9D%SI+)$=+W58S^6!00\$VAKJ@Q61,E(XAL3]\T5"AZR)>B^P$<NZ@(P$2)NJ\VE$<K;SU!`<_+ESWEP#:LKI#FQF;<!0.0?>D9_T=;(W0A.89@*/IM/;^-V[T"ZA'*V8W79L(?4Y4$-E_\F*:7%\4)-]RCW1-)L_,49:2BTB.'HO[Q-EV;($&0@MD*-)HJ&FB8DNZ2@Q65ST-29J?147"4-R\2F"FHY9TBI*?Q:7I4(72'#WH\B9#XOVU-6H#+]_T0*^%A[F>ROKY60*N.)04T`"$5/=0D8"%WYO.;^')K/`IA[&<,EC29C+B:_]/?DT#2'2\'NB/?IU%:D/UW4#D8&M<TJ`R`6'T%7_%XV3(35)>?I+UU1AHLB9=2VD>1ESERCV%20E8,/RG+K6'\[E^7<[GP%XP7G31;?7K0+1$8+Q/RT&+?3X6/I!BL*AECSP:"D*0.K*(O7EMT2PT9C(@:5J)K&NKJ^[@(5B)VE"W8SN742&]KC*/_5TL>+=\UUMIAWGW!DGU)6-`R1*M]FCXQ)<QSV*B'NQ45]!"X;VF0]</P>P8M8+Y?DXO#_R809Y0!8<X=_V\'J:]4AQ00)!?S;(B9VSB"IQ02B;-")&SZ=Q%AY-AZQVB)UI%G5G=4IK*@AG,.;KCG6B"A>L;:G2L[ATI:DM_H2'>GQ_NE-6T[<9=NM5/C'=$9PGXK0"_KB&?N3^NT`OLHXJ&83V=2H/3.U#E-@F2:<=;'FTE',XA/WSYC,_I[A+EX9\T(>M"EJ;[7"3T-^LH=8L^:>GG(9]&6:<%NY1O]OXF*XC:HTO@KE^?\C,878G$80\?77^X5%ZL$FLL52NM!J.]SNB^2@G$%`I7)OY,G,85?@F%F'W_!;7J:7@N,FW0-XV#OF\,&(0;![DTVV-MHC7P$OU;D'&'DS;DR("+!7F`$?_X`#*5T/PG\I+VXAH;MK8>HXNUX@LZC_8T<R&0.-K(GGV$Q8V6\&YU*J(MRQ8`)A3+@5X6FH/]9V1\_L!FW\>MWE103)D<_9$TOH<5>M_FE0DZ@@8`0G7F^7;_WF:_T"_$4=`(YA3*]FJ"$5"A.LN;^L!]X;VW:$^B`37,%8:8]'*KWS``#SMH_E1NGP0J2Z-48OIPN<8(1`Q#4!JPN<0RP>R\NUK0>TI`N^[GQ_*\L`R>8K`L3,\N>;>(_\1`>JU4>8I0M\H,I@1C8L2=[7V@WP/(5`"%H$VV8$>TJUP^W=T^7HX[(\\>9]S_J_QK<\1>RG7_&U?>W@=^(^/EXXET,:L>[W><$-NWUSI.XA4,@NSH4@^;J\6);X=,PC`SZ>M66&W]W3VGB8`-*^\T5@SH#:SM3!*B/K6!EQA.G@M@%$2>AGTN.-*JAY7W3C8I9LS$K5@*^$]B-62.5FP\!J6$/='2N,D?>K*F,$O82GX0.C[D1`FMGG>"'!NZ%#DVJ%1&'5WV#(U=K)A!^]F9K!;FJ/"(!W6^7G[D&*5C0/:PXK:_-CE-P.ZJB.EO"X,M]AF&D7\='+9*7EXZOX2UL>(D[5J(A5YD%FXA<_DX%&Y0X9=0GBS;6_L_J3DV?GG^`^(`PLMT*J4R;L7).6<G#$$:*VFKV!/FQ<,(V##:?^P.-HF.Q*ZUNAX(F+#;'!>W(O=K?5;==J"8P4BE3R(O.^1:WCD]:LA3L9!(8ID1S6PE@=7&!,V6B;/O]9&3SNN)L0S1+T+1<54?PMD;ET51TCB:W9$HIBX)V>Y#OLLRN>HD.\D&?<:8L;%T*Z-&GM$AEI;)/G'A6*+]2*(SMGJQ(6B3E#JP=3^3UC<(FS>8UP#?N8?2.1]F`=8D<=47^7<HKD=N-`W^]34JK@>H?I'[."?UM)'X9Z]Z[\LNIV9EPSX]+UX_9D@$1@)RR!I=VX].$O(JQ#4_@"N`/3^R;G0'![$!A@8*E5[0-9`4.3`.:FDYLK(H8RB^*('*13SEI'YCY-@U;'9+)`])[Y"YPF%`9)O]48O#6#:&ALP#<=,PR2`\@6QD\>-`]O?9`=E(Y;%><^&T5I9?I!!!!%!!!!E!!!!!1!!!!!!!!!$!!"1E2)5!!!!!!!!Q!!!')!!!"S?*RD9'$)%Z"A_M>1^Z?"3?!LE#(^FY&:U)`R.Q-$JZ`!93$.+#!*&*<^S]!OK!U7VD[CS]%!";JMD"S3()=&/=!S(#U;$0```_@Y?O1;8-52(TB4::9]BQ1!&'):!!!!!!!!"!!!!!=!!!8(!!!!"Q!!!#&@<GF@4'&T>%NO<X>O4X>O;7ZH4&:$<'&T=U.M>8.U:8)!!!&9&Q#!!!!!!!%!#!!Q`````Q!"!!!!!!%]!!!!#A!/1$,`````"&"B>'A!!!A!-0````]!%E"!!!(`````!!%&4'FO:8-!5!$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!!F!"5!"!>D<WVN:7ZU"X.F9X2J<WY$;W6Z"'VP=G5!!!!51%!!!@````]!!Q:5<WNF<H-!!!Z!)1F.<W2J:GFF:$]!1A$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<!!;1&!!"!!!!!)!"!!&"EVF<7^S?1!!%E"4$5:J<'6$<WZG;7>.98!!&E"4%&:B=GFB9GRF,5:J<'6.98!!!$"!5!!$!!9!"Q!))U.443V4>'&U;7-N6G&S;7&C<'5N47&O97>F=CZM>G.M98.T!!%!#1!!!!!!!!!<4&:$<'&T=V"S;8:B>'6%982B6'FN:8.U97VQ!!!!'2=!A!!!!!!"!!5!"Q!!!1!!YPX2\!!!!!!!!!!G4&:$<'&T=V"S;8:B>'6%982B4'&T>%&Q='RJ:725;7VF=X2B<8!!!!!:&Q#!!!!!!!%!"1!(!!!"!!$C`>(M!!!!!!!!!"J-6E.M98.T5(*J>G&U:52B>'&5?8"F2'6T9Q!!!6A8!)!!!!!!!1!)!$$`````!!%!!!!!!4Q!!!!+!!Z!-P````]%5'&U;!!!#!!Q`````Q!31%!!!@````]!!16-;7ZF=Q"1!0%!!!!!!!!!!B2-97*73568,5.P<G:J:SZM>GRJ9AV-;7ZF6'^L:7YO9X2M!#5!&1!%"W.P<7VF<H1(=W6D>'FP<A.L:8E%<7^S:1!!!"2!1!!"`````Q!$"F2P;W6O=Q!!$E!B#5VP:'FG;76E0Q"#!0%!!!!!!!!!!B2-97*73568,5.P<G:J:SZM>GRJ9AJ$<WZG;7=O9X2M!"J!5!!%!!!!!A!%!!5'476N<X*Z!!!31&-.2GFM:5.P<G:J:UVB=!!71&-16G&S;7&C<'5N2GFM:5VB=!!!-%"1!!-!"A!(!!AD1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S,GRW9WRB=X-!!1!*!!!!!!!!!"Z-6E.M98.T5(*J>G&U:52B>'&%:GRU2'&U96.J?G5!!!!:&Q#!!!!!!!%!"1!$!!!"!!!!!!!6!!!!!!!!!"J-6E.M98.T5(*J>G&U:52B>'&%:GRU2'&U91!!!9%8!)!!!!!!#A!/1$,`````"&"B>'A!!!A!-0````]!%E"!!!(`````!!%&4'FO:8-!5!$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!!F!"5!"!>D<WVN:7ZU"X.F9X2J<WY$;W6Z"'VP=G5!!!!51%!!!@````]!!Q:5<WNF<H-!!!Z!)1F.<W2J:GFF:$]!1A$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<!!;1&!!"!!!!!)!"!!&"EVF<7^S?1!!%E"4$5:J<'6$<WZG;7>.98!!&E"4%&:B=GFB9GRF,5:J<'6.98!!!$"!5!!$!!9!"Q!))U.443V4>'&U;7-N6G&S;7&C<'5N47&O97>F=CZM>G.M98.T!!%!#6"53$!!!!!%!!!!!!!!!!!!!!!!!"=!A!!!!!!"!!1!!!!"!!!!!!!!&Q#!!!!!!!%!"!!!!!%!!!!!!!!!!!!!!!!!'ER71WRB=X.1=GFW982F2'&U962B9E^S:'6S!!!!12=!A!!!!!!#!!5!"Q!!$!"!!!(`````!!!!!1!"!!!!"Q!!!!!!!!!"!!!!!A!!!!-!!!!%!!!!"1!!!!9!!!!!!!!!!!1!%!!6!!!!"!!!!9%!!!!I!!!!!A!!"!!!!!!/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!C!!!!4"?*SF5]NOUU!50=</ES;%%%)*N(8[!.LC#!%L.FB%6)L5I+B'9=P%(A?LDBX:EYLO_""_CF^AT9*_!))\NEEL23K*]*8'=_??G8-]^RB!"V8T_7^[N!%4HY!CHME->>/%EMS5X,%8]"A$8#"^<D3/W7D9?`P"[);"[YU\`JHPD3I3^DY]Z5((&D\W=">;Q1YH%R[)1MRNY97"?ML0N5E9=4KF-7>1]]GW'+3F8?K(DO>[X(G..`^A,'?*J'O:!WA337-OHR;!Y7K;$]XL.?=3[(`I[H-[["RUOV<FS0.Z#OST+:KG62OSS'-DHROS*"@R&2@@@XX\1@P6>O^>T\!%%ZZNT)(7<$I.)Z(3\H3N`A+CTQ)WZB%B<*`&]>:V'+GX1XJ6=E%*Z9WO0YM&D`41V:0._D4STJDAOM-%1YY#:4C!]B.LF+B:CB?IIG17I,L_'%8TCRK?C(3"BSZK#5-.NV&8:YZ,8)H`[)CZY`"SN<[6J*4,`5W[[T:?L>#F/G38'G4:?VCHG:7JP)]77KLY\.#8$;C(>`#!:L<M"[FM,W`RT<H&GX.$<&URR%&#JS^R\3G^1J'D-WD)SU'2@_Z(+GAY)K5[>L",.S*DD\LR.^;S7&SZL$R+)OWEAM?:N'5=)4^LU>F680E$+!IA;8F[X51&N`!1'X32WXC#@2Q1D11K#@31]HW+-F%`J>R)+A<6.EH1/C',@Q$S:BF@!!!!AQ!"!!)!!Q!%!!!!3!!2!!!!!!!2!0%!Z1!!!&M!%1!!!!!!%1$R!/5!!!"O!"%!!!!!!"%!]1$F!!!!A9!!A!#!!!!2!0%!Z2*.;7.S<X.P:H1A77&):7EA65E347FD=G^T<W:U)&FB3'6J)&6*%EVJ9X*P=W^G>#":95BF;3"631%Q!&*45E-.#A!$4&:$1UR#6F=!!#.I!!!%B!!!!#!!!#.)!!!!!!!!!!!!!!!A!!!!.!!!"'1!!!!=4%F#4A!!!!!!!!&A4&:45A!!!!!!!!&U5F242Q!!!!!!!!')1U.46!!!!!!!!!'=4%FW;1!!!!!!!!'Q1U^/5!!!!!!!!!(%6%UY-!!!!!%!!!(92%:%5Q!!!!!!!!)!4%FE=Q!!!!!!!!)56EF$2!!!!!)!!!)I>G6S=Q!!!!1!!!*E5U.45A!!!!!!!!,)2U.15A!!!!!!!!,=35.04A!!!!!!!!,Q;7.M.!!!!!!!!!-%;7.M/!!!!!!!!!-94%FG=!!!!!!!!!-M2F")9A!!!!!!!!.!2F"421!!!!!!!!.56F"%5!!!!!!!!!.I4%FC:!!!!!!!!!.]1E2)9A!!!!!!!!/11E2421!!!!!!!!/E6EF55Q!!!!!!!!/Y2&2)5!!!!!!!!!0-466*2!!!!!!!!!0A3%F46!!!!!!!!!0U6E.55!!!!!!!!!1)2F2"1A!!!!!!!!1=!!!!!0````]!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"1!!!!!!!!!!$`````!!!!!!!!!01!!!!!!!!!!0````]!!!!!!!!"#!!!!!!!!!!!`````Q!!!!!!!!%1!!!!!!!!!!$`````!!!!!!!!!A1!!!!!!!!!!0````]!!!!!!!!#$!!!!!!!!!!#`````Q!!!!!!!!)Y!!!!!!!!!!$`````!!!!!!!!!F!!!!!!!!!!!0````]!!!!!!!!#I!!!!!!!!!!!`````Q!!!!!!!!+Q!!!!!!!!!!(`````!!!!!!!!"'1!!!!!!!!!!P````]!!!!!!!!'@!!!!!!!!!!%`````Q!!!!!!!!B9!!!!!!!!!!@`````!!!!!!!!#'A!!!!!!!!!#0````]!!!!!!!!)?!!!!!!!!!!*`````Q!!!!!!!!C)!!!!!!!!!!L`````!!!!!!!!#*A!!!!!!!!!!0````]!!!!!!!!)K!!!!!!!!!!!`````Q!!!!!!!!D!!!!!!!!!!!$`````!!!!!!!!#.1!!!!!!!!!!0````]!!!!!!!!*7!!!!!!!!!!!`````Q!!!!!!!!N=!!!!!!!!!!$`````!!!!!!!!$W!!!!!!!!!!!0````]!!!!!!!!1M!!!!!!!!!!!`````Q!!!!!!!"I%!!!!!!!!!!$`````!!!!!!!!'AQ!!!!!!!!!!0````]!!!!!!!!;&!!!!!!!!!!!`````Q!!!!!!!"IE!!!!!!!!!!$`````!!!!!!!!'IQ!!!!!!!!!!0````]!!!!!!!!;F!!!!!!!!!!!`````Q!!!!!!!#"A!!!!!!!!!!$`````!!!!!!!!)'A!!!!!!!!!!0````]!!!!!!!!A=!!!!!!!!!!!`````Q!!!!!!!##=!!!!!!!!!)$`````!!!!!!!!)M!!!!!!(U.443V4>'&U;7-N6G&S;7&C<'5N47&O97>F=CZD>'Q!!!!! + &Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!#@M5F.31QU+!!.-6E.$4%*76Q!!)WA!!!3%!!!!)!!!)UA!!!"+!!!!!C&*4EEN5X2B>'FD,6:B=GFB9GRF,6.V=("P=H1O<(:M;7)D1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S,GRW9WRB=X-!!!!!!+!8!)!!!$!!!#A!"!!!!!!%!!-!0!#]!"^!A!)!!!!!!1!"!!<`````!!!!!!!!!!!!!!!!&XGE(>U;5EW@7GKL]-E'>Q!!!!Q!!!!1!!!!!#PUZ9(2;YZ$K5R;:3G3P[\5(9T:DQ#S"/G!#:DM_%*_!!!1!!!!!!![ZIJ%[C+D1:R]MG0@<KX=!1!!!0`````5(9T:DQ#S"/G!#:DM_%*_!!!!%(L=A_\VAW)L/HFM6(E=\.Y!!!!%!!!!!!!!!/Y!!5R71U-!!!!$!!*735R#!!!!!&"53$!!!!!&!!%!!1!!!!!#!!*735.$!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<&"53$!!!!!C!!%!"A!!!!!/4'&C6EF&6SV$<WZG;7=+1W^O:GFH,G.U<!!!!!!!!5)!!!!!!!*735.$!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!"16%AQ!!!!*1!"!!9!!!!!$ERB9F:*26=N1W^O:GFH$5RJ<G65<WNF<CZD>'Q!!!!!!!*#!!!)!!!$!!!!!!!#!!-!!!!!!#A!!!!C?*RDY'2A;7#YQ!$%D!R-$6R!&J-'!ZBG_-$!Q-(!!!#%/A?(!!!!&!!!!"2YH'0A9/"FY%#"$!!$A1"/!!!!4!!!!2BYH'.AQ!4`A1")-4)Q-(U$UGRIYG!;RK9GQ'5O,LOAYMR!T!,%L$"BI,PX!'EGE$B5D3D9/QR-$Y$Y",IZ`&$[!:)9!,D0+6Q!!!!-!!&73524!!!!!!!$!!!"LQ!!!Z2YH.P!S-#1;7RBRM$%Q-!-:)MT.$!EZ[?E]D)!_1Q1I!.D5!!#I/:JI9E<(DC="A2[`0)N9(\T'ZZO&R7"ZBI6#;:3E7Y@&:&/(R774B;6&X`_```@@)4H=,>(TH&('Z$;<A[A_(%8&1Y1"UCTA/D`A2EA6;DGS81#:9'U"*)'O)%I^A=!68%U6#ATF,!9(IA[@,T"B"(C5*A4IL#ZFXDTG^^Q!$UF=0!B3X?D"J$@/R&%!I6Y/E-Y*)[\=/C)!@G-*U!'>P,!@-U"^U]9S)!3&9&/%Z"&,)QQC\L:DDNIA-0"112#:5#I#AB6!+*WA&VQB#0O-$T]V\[_NYM63,-BR9E$%$?!'%SI7)_"E9%2T'2E7!N6;Q.E-U(&9(%,9CN!AYW2Q2[OZT:58A0*(">'G"[%OGIE>T#"T7"E_--!-Q^I(V20!^4>)$&@I.A"+$M%S*Y!:5=$W2_A\#1A7Q$+TA3S$2AB\$QI'WQ:!W\;W>`&&3G9Q0E#FD55A4AZN]$!1+_[/E!HWF!H/":%JDL:G.D&[DD6[I4JB.5#V3C!V"5EF_&4"A#`&JT*!!!!!B1!!!-)?*RT9'"AS$3W-%NA9G"A:G2A%'>I9%D/4UFF1!)HG"BQAN$A],$G.S\>,CI2H3YK$NU_+D'>0CIW1,9&E$<J:ODG".)MH3QK,`\]``_`^1$`F!0]L4?"/I&;,(I^7)#S&E">*MU(7=!;(&B;$Z1)>BNUMQ(.-!"CD?:D,+^&DA-:)0O!N!').DT1?;S<M`6EC83X:4?`Z=(/Q\6M10U'H;?<D\.IHA$J?]U&6XS\^8;>*L_]#^"7NGZ_:!=V`W!M^1"K!6LCX8K\`A(162JA2Z:;>)=!(?D%!D3+!_1>:%='M<2?+F(K.OI7[QR2E1&C%:!D69''A<SX\5$T%:?Y_/D9QU!(C%">,1.WS#8$<^W7L@_"LL<PVL?]WHE:[/I=I!GP1;Z_"4,I.4^=]?X8T/ZO1&@6=83R7<'8,HH^M@53`Z2$*;T]WQ[^HA.U(A@%?2;^DC$+J+'3B9&`[M''+B"VK//#Q1G$5S8=)/>]9(S:#@1MU(-/P2[]1#_!)MKG.Z!8;+..NQ.PNS=PFFASBGNB17BBA7BB[@:EQ>3S\=1/9"JCY(=^_0,HP```A=SVL_`N9A<3D%BJRA')G2FYQ7+AJ+5.&6>CE)#,\9'+&1.&G+"C&[''A.AM4!CT1-$:X]560=W#F#M#=8*OA9'"8H6VA%[UI5ZQ,)B-><)RM9P6=;L6#>-*KQ7K!1#U\?=0!!!"V1!!!P"YH(.A9'$).,9Q%W"C9'"G:'!1:WBA3-Z0376!!FO9'(##Y0#QZD=_X4%K-:UR+B\>.3I*H45K,E#W!Z#W[79'ECS>,#IP`PT``\`T7/MX`N:YI#W^TCS>,CI/T=>:Q+K+76K`F1BWG`7[A92.OPE[@61M8H->>V'R!.FB?,+<P@6!Z[%3FG["<C(,CS6GP5!:I%I>)+U$J(G!JH!!6<-Q!V5@:V%";1,<W(K!P`5^E.-.MA6I2AFL.U0T!:!F"NV!+Y$7;,3?L0-#MEXYZ2N!WLIZA:)MH4T),FY,%A=K;4\)!N2BUAX5$4-E2%8$KR.)N&[K0QKW"/CL8A_1-LDH(%!5"]B5I!M&'%%O",K9%?*3&JB,14;6OC.J"VJIURP)!D4=JMO"J=/2"3DHU?P"#Z4T!-KZ."]%-6W[(5!53B#8=(:_;$\C%R=@@2CCBQ7BBQ7CBQ6:$T#18![]0AO*T\7P\_VC!^+-3((M!-2:1"'1'#AJX)++ZS+*O5!V^$!9A-6!?#J581G1RQ26VQV6"W,PB\*TE-T2A/K*1"+<B?1/%($W>X&&4Z]AN1J!H&S18+:882WA%WWI%RQ,)F/><%TM9H7=;H8#>-*K!?!QQC1!!!!!!!!-&Q#!"1!!"$%X,D!!!!!!$"=!A!!!!!1R.SYQ!!!!!!Q8!)!&!!!%-4=O-!!!!!!-&Q#!!!!!"$%X,D!!!!!!$"=!A!5!!!1R.SYQ!!!!!"1"!!!!^6=VAHEGIIQO=V*/"EEZH1!!!!U!!!!!!!!!!!!!!!!!!!!!!!!!A0````_!!!!"DK2/Y:#GU*'-J6<BAE23E:R%4J'!!!!"`````Y!!!!'!!!!"A!,!!9!)-!'!)!Q"A)!$!9!!!Q'!9!Y"A(A_!9"_`A'!@`Y"A(`_!9"``A'!@`Y"A(`_!9$``_'!(`XZA!`XY9!$X]'!!(]"A!!]!9!!!!(`````!!!#!.X>X>X>X>X>X>X>X>X>X>X4-T-T-T-T-T-T-T-T-T-^UT0`]`0T0T-`-``T``-T0>-`-T0T]T`T`T]T-`-`-TX4-`]T]`-`0T]`0`0`]T-^UT-T]T]T0T-`0T0T]T]T0>-``T-`-T]T0T0`]`-`-TX4-T-T-T-T-T-T-T-T-T-^X>X>X>X>X>X>X>X>X>X>X>!!!!!!!!!!!!!!!!!!!!X1!!!!!!!!!!!!!!!!!!!.U!!!!!!!!+KK!!!!!!!!$>!!!!!!!+IT-[I!!!!!!!X1!!!!!+IT-T-TKA!!!!!.U!!!!+IT-T-T-T/K!!!!$>!!!!#K-T-T-T-T_A!!!!X1!!!!KKIT-T-T``I!!!!.U!!!!+KKKD-T```[!!!!$>!!!!#KKKKKL```_A!!!!X1!!!!KKKKKP````I!!!!.U!!!!+KKKKL````[!!!!$>!!!!#KKKKK````_A!!!!X1!!!!KKKKKP````I!!!!.U!!!!+KKKKL````[!!!!$>!!!!#KKKKK````KP`Q!!X1!!!!#KKKKP``KK````!.U!!!!!!+KKL`KK````!!$>!!!!!!!!KKKD````]!!!X1!!!!!!!!#D````]!!!!.U!!!!!!!!!!!``]!!!!!$>!!!!!!!!!!!!!!!!!!!!X>X>X>X>X>X>X>X>X>X>X>!!!%!(N\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$XN\$Q]0````$`]0`Q]0`Q]0$`]0$````Q````]0$Q]0?XM0$`]0$Q]0`Q``$Q```Q```Q``$Q]0$`]0$`]0$Q^\?Q]0$```$Q``$`]0$`]0`Q``$`]0``]0````$Q]0$XN\$Q]0$Q``$Q``$Q]0`Q]0$`]0`Q]0`Q``$Q``$Q]0?XM0$````Q]0$`]0$Q``$Q]0`Q]0````$`]0$`]0$Q^\?Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$Q]0$XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"\?Q!!!!!!!!!!!!!!!!!!#!A!!!!!!!!!!!!!!!!!!(N\!!!!!!!!!!!!!!!!#'1[:'1)!!!!!!!!!!!!!!!!?XM!!!!!!!!!!!!!#'1[$Q]0$W2E#!!!!!!!!!!!!!"\?Q!!!!!!!!!!#'1[$Q]0$Q]0$Q^E:!A!!!!!!!!!!(N\!!!!!!!!!'1[$Q]0$Q]0$Q]0$Q]0:'1!!!!!!!!!?XM!!!!!!!!!/DI0$Q]0$Q]0$Q]0$Q`_:!!!!!!!!!"\?Q!!!!!!!!![:'1[$Q]0$Q]0$Q`_`PY[!!!!!!!!!(N\!!!!!!!!!$JE:'2E/A]0$Q`_`P\_`DI!!!!!!!!!?XM!!!!!!!!!/G2E:'2E:$JE`P\_`P\_/A!!!!!!!!"\?Q!!!!!!!!![:'2E:'2E:0\_`P\_`PY[!!!!!!!!!(N\!!!!!!!!!$JE:'2E:'2E`P\_`P\_`DI!!!!!!!!!?XM!!!!!!!!!/G2E:'2E:'4_`P\_`P\_/A!!!!!!!!"\?Q!!!!!!!!![:'2E:'2E:0\_`P\_`PY[!!!!!!!!!(N\!!!!!!!!!$JE:'2E:'2E`P\_`P\_`DI!!!!!!!!!?XM!!!!!!!!!:'2E:'2E:'4_`P\_`PZE:+SML!!!!!"\?Q!!!!!!!!!!/DJE:'2E:0\_`PZE:$KML+SML+Q!!(N\!!!!!!!!!!!!!$JE:'2E`PZE:$KML+SML+Q!!!!!?XM!!!!!!!!!!!!!!!![:'2E:!_ML+SML+SM!!!!!!"\?Q!!!!!!!!!!!!!!!!!!/A_ML+SML+SM!!!!!!!!!(N\!!!!!!!!!!!!!!!!!!!!!!#ML+SM!!!!!!!!!!!!?XM!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XN\?XM!!!&+!!&'5%B1!!!!!A!#6%2$1Q!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<&"53$!!!!!C!!%!"A!!!!!/4'&C6EF&6SV$<WZG;7=+1W^O:GFH,G.U<!!!!!!!!%)!!!!!!!!!!1!!!%V16%AQ!!!!,!!"!!9!!!!!$ERB9F:*26=N1W^O:GFH&%RB9F:*26=N1W^O:GFH,GRW<'FC!!*52%.$!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!"16%AQ!!!!*1!"!!9!!!!!$ERB9F:*26=N1W^O:GFH$5RJ<G65<WNF<CZD>'Q!!!!!!!"#!!!)!!!!!!%!!!&)5&2)-!!!!#Q!!1!'!!!!!!Z-97*73568,5.P<G:J:R2-97*73568,5.P<G:J:SZM>GRJ9A!$!!!!!!F1!!!>RHC=T6FN<&08'8\0^5VSH4D*N9-*,EZM*T=G>!G+;%IBWQIDJI8Q5>LQM<:4WR!\Y$7*C_/E]'-F5[RIG6:NUS<W)68KDQVJ0S:_Z%?VF7Y1'=LG([X1.+HNJ,2I-%W>.C;6U4&O\NZTLO`X4?RF6+ID(<HO_X(/]T\H?=]Z!,1MC/OY*8B&"C,?RC`\:+B.&AF!I6O!UC=_#_*B]B]A;U*%BBX#9@%$<IG%:@!FCX'B*T%(N^";?5?:]PQ"`CV_B+<69AC$V=L1G#`#D`Q$UK)IH1^,=V6;W#;)C+_3*?[L5O3/]'I_AREBXUF(@T>:!J+)]8S_\?$1?#IPU6_^X5+)R@4+)#;+^6FJ=1.'R.Q,,#4*?DYB-VJ)Q*#>-$]`<TDZ6;=YG]:7^0&]!M"8E?Q+0I&%M76#7ORC0L8-BW42JZ1H%6H[!:U\><+\.C7+)LKCX[H3EKGPZC@P9(\8LV^(0RR,@C>E7#-N\B2#QE@*^[PKH]S`!12)Y8F")=L0U0]\`A/U$-QWA*71CK3DDYC$_*_$-DS9,X)P!%6971,A-K3(F9,83P%F6IL(7#G]C4E2D&L]P%QN%HSBL;6`>()CF]J'-S02Y>'BC9HI3^HUV&!O&5U/Z9;=6@JSIBB[B#*!ET''1$0QX"DJ-C/?A80HTC%)/"KOD[*LM\3I_T8B=E\C=D45EQ<K.+O"XH:%,`(JI?-5Q9Y_4C/OBR&X0RX*/0P_3Y0%GZ(%@N%_21O*(`Y-3,Q&O@7+H=3>X"'S<16#0K)['34GDC!URUHH#DZ<U??-G=39IR.^NJ5H]49(C;GPD=2HTZ[V_'%:_H13]Y3I*-[`K^R4\F%KHV2_T@W44$%K?ZD(!N9$.5=EG)4-9**>G-2#X>]M4^W2F3M1L1;6PO+2I7R[[.BIKPOR^'BK`^",NJ*AFIO9:4KU76KMMX#W'C[3O*<F8V;MV#TZ'%TX]HG*`G+O]35<DY/9=-%IVBV8X"'`"=3PYWHI?!93H`L_LJ,:%Z`VF#Q7E-5;8H!*;4.DQYPEFM@L;)6YV6/9_D0D)_HD<G#2S@M-&JF;(6DE:2?Q?!/M*'Z]K2CDKPA0D(C*3!QKDV<UQ73RG6#E%O=D!V;I?MN!R:7AKN[@'MNE4^MQ'J3*K#JS9D%SI+)$=+W58S^6!00\$VAKJ@Q61,E(XAL3]\T5"AZR)>B^P$<NZ@(P$2)NJ\VE$<K;SU!`<_+ESWEP#:LKI#FQF;<!0.0?>D9_T=;(W0A.89@*/IM/;^-V[T"ZA'*V8W79L(?4Y4$-E_\F*:7%\4)-]RCW1-)L_,49:2BTB.'HO[Q-EV;($&0@MD*-)HJ&FB8DNZ2@Q65ST-29J?147"4-R\2F"FHY9TBI*?Q:7I4(72'#WH\B9#XOVU-6H#+]_T0*^%A[F>ROKY60*N.)04T`"$5/=0D8"%WYO.;^')K/`IA[&<,EC29C+B:_]/?DT#2'2\'NB/?IU%:D/UW4#D8&M<TJ`R`6'T%7_%XV3(35)>?I+UU1AHLB9=2VD>1ESERCV%20E8,/RG+K6'\[E^7<[GP%XP7G31;?7K0+1$8+Q/RT&+?3X6/I!BL*AECSP:"D*0.K*(O7EMT2PT9C(@:5J)K&NKJ^[@(5B)VE"W8SN742&]KC*/_5TL>+=\UUMIAWGW!DGU)6-`R1*M]FCXQ)<QSV*B'NQ45]!"X;VF0]</P>P8M8+Y?DXO#_R809Y0!8<X=_V\'J:]4AQ00)!?S;(B9VSB"IQ02B;-")&SZ=Q%AY-AZQVB)UI%G5G=4IK*@AG,.;KCG6B"A>L;:G2L[ATI:DM_H2'>GQ_NE-6T[<9=NM5/C'=$9PGXK0"_KB&?N3^NT`OLHXJ&83V=2H/3.U#E-@F2:<=;'FTE',XA/WSYC,_I[A+EX9\T(>M"EJ;[7"3T-^LH=8L^:>GG(9]&6:<%NY1O]OXF*XC:HTO@KE^?\C,878G$80\?77^X5%ZL$FLL52NM!J.]SNB^2@G$%`I7)OY,G,85?@F%F'W_!;7J:7@N,FW0-XV#OF\,&(0;![DTVV-MHC7P$OU;D'&'DS;DR("+!7F`$?_X`#*5T/PG\I+VXAH;MK8>HXNUX@LZC_8T<R&0.-K(GGV$Q8V6\&YU*J(MRQ8`)A3+@5X6FH/]9V1\_L!FW\>MWE103)D<_9$TOH<5>M_FE0DZ@@8`0G7F^7;_WF:_T"_$4=`(YA3*]FJ"$5"A.LN;^L!]X;VW:$^B`37,%8:8]'*KWS``#SMH_E1NGP0J2Z-48OIPN<8(1`Q#4!JPN<0RP>R\NUK0>TI`N^[GQ_*\L`R>8K`L3,\N>;>(_\1`>JU4>8I0M\H,I@1C8L2=[7V@WP/(5`"%H$VV8$>TJUP^W=T^7HX[(\\>9]S_J_QK<\1>RG7_&U?>W@=^(^/EXXET,:L>[W><$-NWUSI.XA4,@NSH4@^;J\6);X=,PC`SZ>M66&W]W3VGB8`-*^\T5@SH#:SM3!*B/K6!EQA.G@M@%$2>AGTN.-*JAY7W3C8I9LS$K5@*^$]B-62.5FP\!J6$/='2N,D?>K*F,$O82GX0.C[D1`FMGG>"'!NZ%#DVJ%1&'5WV#(U=K)A!^]F9K!;FJ/"(!W6^7G[D&*5C0/:PXK:_-CE-P.ZJB.EO"X,M]AF&D7\='+9*7EXZOX2UL>(D[5J(A5YD%FXA<_DX%&Y0X9=0GBS;6_L_J3DV?GG^`^(`PLMT*J4R;L7).6<G#$$:*VFKV!/FQ<,(V##:?^P.-HF.Q*ZUNAX(F+#;'!>W(O=K?5;==J"8P4BE3R(O.^1:WCD]:LA3L9!(8ID1S6PE@=7&!,V6B;/O]9&3SNN)L0S1+T+1<54?PMD;ET51TCB:W9$HIBX)V>Y#OLLRN>HD.\D&?<:8L;%T*Z-&GM$AEI;)/G'A6*+]2*(SMGJQ(6B3E#JP=3^3UC<(FS>8UP#?N8?2.1]F`=8D<=47^7<HKD=N-`W^]34JK@>H?I'[."?UM)'X9Z]Z[\LNIV9EPSX]+UX_9D@$1@)RR!I=VX].$O(JQ#4_@"N`/3^R;G0'![$!A@8*E5[0-9`4.3`.:FDYLK(H8RB^*('*13SEI'YCY-@U;'9+)`])[Y"YPF%`9)O]48O#6#:&ALP#<=,PR2`\@6QD\>-`]O?9`=E(Y;%><^&T5I9?I!!!!%!!!!E!!!!!1!!!!!!!!!$!!"1E2)5!!!!!!!!Q!!!')!!!"S?*RD9'$)%Z"A_M>1^Z?"3?!LE#(^FY&:U)`R.Q-$JZ`!93$.+#!*&*<^S]!OK!U7VD[CS]%!";JMD"S3()=&/=!S(#U;$0```_@Y?O1;8-52(TB4::9]BQ1!&'):!!!!!!!!"!!!!!=!!!8(!!!!"Q!!!#&@<GF@4'&T>%NO<X>O4X>O;7ZH4&:$<'&T=U.M>8.U:8)!!!&9&Q#!!!!!!!%!#!!Q`````Q!"!!!!!!%]!!!!#A!/1$,`````"&"B>'A!!!A!-0````]!%E"!!!(`````!!%&4'FO:8-!5!$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!!F!"5!"!>D<WVN:7ZU"X.F9X2J<WY$;W6Z"'VP=G5!!!!51%!!!@````]!!Q:5<WNF<H-!!!Z!)1F.<W2J:GFF:$]!1A$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<!!;1&!!"!!!!!)!"!!&"EVF<7^S?1!!%E"4$5:J<'6$<WZG;7>.98!!&E"4%&:B=GFB9GRF,5:J<'6.98!!!$"!5!!$!!9!"Q!))U.443V4>'&U;7-N6G&S;7&C<'5N47&O97>F=CZM>G.M98.T!!%!#1!!!!!!!!!<4&:$<'&T=V"S;8:B>'6%982B6'FN:8.U97VQ!!!!'2=!A!!!!!!"!!5!"Q!!!1!!YPX2\!!!!!!!!!!G4&:$<'&T=V"S;8:B>'6%982B4'&T>%&Q='RJ:725;7VF=X2B<8!!!!!:&Q#!!!!!!!%!"1!(!!!"!!$C`>(M!!!!!!!!!"J-6E.M98.T5(*J>G&U:52B>'&5?8"F2'6T9Q!!!6A8!)!!!!!!!1!)!$$`````!!%!!!!!!4Q!!!!+!!Z!-P````]%5'&U;!!!#!!Q`````Q!31%!!!@````]!!16-;7ZF=Q"1!0%!!!!!!!!!!B2-97*73568,5.P<G:J:SZM>GRJ9AV-;7ZF6'^L:7YO9X2M!#5!&1!%"W.P<7VF<H1(=W6D>'FP<A.L:8E%<7^S:1!!!"2!1!!"`````Q!$"F2P;W6O=Q!!$E!B#5VP:'FG;76E0Q"#!0%!!!!!!!!!!B2-97*73568,5.P<G:J:SZM>GRJ9AJ$<WZG;7=O9X2M!"J!5!!%!!!!!A!%!!5'476N<X*Z!!!31&-.2GFM:5.P<G:J:UVB=!!71&-16G&S;7&C<'5N2GFM:5VB=!!!-%"1!!-!"A!(!!AD1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S,GRW9WRB=X-!!1!*!!!!!!!!!"Z-6E.M98.T5(*J>G&U:52B>'&%:GRU2'&U96.J?G5!!!!:&Q#!!!!!!!%!"1!$!!!"!!!!!!!6!!!!!!!!!"J-6E.M98.T5(*J>G&U:52B>'&%:GRU2'&U91!!!9%8!)!!!!!!#A!/1$,`````"&"B>'A!!!A!-0````]!%E"!!!(`````!!%&4'FO:8-!5!$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7).4'FO:62P;W6O,G.U<!!F!"5!"!>D<WVN:7ZU"X.F9X2J<WY$;W6Z"'VP=G5!!!!51%!!!@````]!!Q:5<WNF<H-!!!Z!)1F.<W2J:GFF:$]!1A$R!!!!!!!!!!)54'&C6EF&6SV$<WZG;7=O<(:M;7)+1W^O:GFH,G.U<!!;1&!!"!!!!!)!"!!&"EVF<7^S?1!!%E"4$5:J<'6$<WZG;7>.98!!&E"4%&:B=GFB9GRF,5:J<'6.98!!!$"!5!!$!!9!"Q!))U.443V4>'&U;7-N6G&S;7&C<'5N47&O97>F=CZM>G.M98.T!!%!#6"53$!!!!!%!!!!!!!!!!!!!!!!!"=!A!!!!!!"!!1!!!!"!!!!!!!!&Q#!!!!!!!%!"!!!!!%!!!!!!!!!!!!!!!!!'ER71WRB=X.1=GFW982F2'&U962B9E^S:'6S!!!!12=!A!!!!!!#!!5!"Q!!$!"!!!(`````!!!!!1!"!!!!"Q!!!!!!!!!"!!!!!A!!!!-!!!!%!!!!"1!!!!9!!!!!!!!!!!1!%!!6!!!!"!!!!9%!!!!I!!!!!A!!"!!!!!!/!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!C!!!!4"?*SF5]NOUU!50=</ES;%%%)*N(8[!.LC#!%L.FB%6)L5I+B'9=P%(A?LDBX:EYLO_""_CF^AT9*_!))\NEEL23K*]*8'=_??G8-]^RB!"V8T_7^[N!%4HY!CHME->>/%EMS5X,%8]"A$8#"^<D3/W7D9?`P"[);"[YU\`JHPD3I3^DY]Z5((&D\W=">;Q1YH%R[)1MRNY97"?ML0N5E9=4KF-7>1]]GW'+3F8?K(DO>[X(G..`^A,'?*J'O:!WA337-OHR;!Y7K;$]XL.?=3[(`I[H-[["RUOV<FS0.Z#OST+:KG62OSS'-DHROS*"@R&2@@@XX\1@P6>O^>T\!%%ZZNT)(7<$I.)Z(3\H3N`A+CTQ)WZB%B<*`&]>:V'+GX1XJ6=E%*Z9WO0YM&D`41V:0._D4STJDAOM-%1YY#:4C!]B.LF+B:CB?IIG17I,L_'%8TCRK?C(3"BSZK#5-.NV&8:YZ,8)H`[)CZY`"SN<[6J*4,`5W[[T:?L>#F/G38'G4:?VCHG:7JP)]77KLY\.#8$;C(>`#!:L<M"[FM,W`RT<H&GX.$<&URR%&#JS^R\3G^1J'D-WD)SU'2@_Z(+GAY)K5[>L",.S*DD\LR.^;S7&SZL$R+)OWEAM?:N'5=)4^LU>F680E$+!IA;8F[X51&N`!1'X32WXC#@2Q1D11K#@31]HW+-F%`J>R)+A<6.EH1/C',@Q$S:BF@!!!!AQ!"!!)!!Q!%!!!!3!!2!!!!!!!2!0%!Z1!!!&M!%1!!!!!!%1$R!/5!!!"O!"%!!!!!!"%!]1$F!!!!A9!!A!#!!!!2!0%!Z2*.;7.S<X.P:H1A77&):7EA65E347FD=G^T<W:U)&FB3'6J)&6*%EVJ9X*P=W^G>#":95BF;3"631%Q!&*45E-.#A!$4&:$1UR#6F=!!#.I!!!%B!!!!#!!!#.)!!!!!!!!!!!!!!!A!!!!.!!!"'1!!!!=4%F#4A!!!!!!!!&A4&:45A!!!!!!!!&U5F242Q!!!!!!!!')1U.46!!!!!!!!!'=4%FW;1!!!!!!!!'Q1U^/5!!!!!!!!!(%6%UY-!!!!!%!!!(92%:%5Q!!!!!!!!)!4%FE=Q!!!!!!!!)56EF$2!!!!!)!!!)I>G6S=Q!!!!1!!!*E5U.45A!!!!!!!!,)2U.15A!!!!!!!!,=35.04A!!!!!!!!,Q;7.M.!!!!!!!!!-%;7.M/!!!!!!!!!-94%FG=!!!!!!!!!-M2F")9A!!!!!!!!.!2F"421!!!!!!!!.56F"%5!!!!!!!!!.I4%FC:!!!!!!!!!.]1E2)9A!!!!!!!!/11E2421!!!!!!!!/E6EF55Q!!!!!!!!/Y2&2)5!!!!!!!!!0-466*2!!!!!!!!!0A3%F46!!!!!!!!!0U6E.55!!!!!!!!!1)2F2"1A!!!!!!!!1=!!!!!0````]!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"1!!!!!!!!!!$`````!!!!!!!!!01!!!!!!!!!!0````]!!!!!!!!"#!!!!!!!!!!!`````Q!!!!!!!!%1!!!!!!!!!!$`````!!!!!!!!!A1!!!!!!!!!!0````]!!!!!!!!#$!!!!!!!!!!#`````Q!!!!!!!!)Y!!!!!!!!!!$`````!!!!!!!!!F!!!!!!!!!!!0````]!!!!!!!!#I!!!!!!!!!!!`````Q!!!!!!!!+Q!!!!!!!!!!(`````!!!!!!!!"'1!!!!!!!!!!P````]!!!!!!!!'@!!!!!!!!!!%`````Q!!!!!!!!B9!!!!!!!!!!@`````!!!!!!!!#'A!!!!!!!!!#0````]!!!!!!!!)?!!!!!!!!!!*`````Q!!!!!!!!C)!!!!!!!!!!L`````!!!!!!!!#*A!!!!!!!!!!0````]!!!!!!!!)K!!!!!!!!!!!`````Q!!!!!!!!D!!!!!!!!!!!$`````!!!!!!!!#.1!!!!!!!!!!0````]!!!!!!!!*7!!!!!!!!!!!`````Q!!!!!!!!N=!!!!!!!!!!$`````!!!!!!!!$W!!!!!!!!!!!0````]!!!!!!!!1M!!!!!!!!!!!`````Q!!!!!!!"I%!!!!!!!!!!$`````!!!!!!!!'AQ!!!!!!!!!!0````]!!!!!!!!;&!!!!!!!!!!!`````Q!!!!!!!"IE!!!!!!!!!!$`````!!!!!!!!'IQ!!!!!!!!!!0````]!!!!!!!!;F!!!!!!!!!!!`````Q!!!!!!!#"A!!!!!!!!!!$`````!!!!!!!!)'A!!!!!!!!!!0````]!!!!!!!!A=!!!!!!!!!!!`````Q!!!!!!!##=!!!!!!!!!)$`````!!!!!!!!)M!!!!!!(U.443V4>'&U;7-N6G&S;7&C<'5N47&O97>F=CZD>'Q!!!!! @@ -49,7 +49,7 @@ true 1 1 - 44040208 + 8388624 &Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!%2!!!!$!!-1#%'=X2B>(6T!!!,1!-!"'.P:'5!!""!-0````]'=W^V=G.F!!!71&!!!Q!!!!%!!AFF=H*P=C"P>81!"!!!!!R!5Q>798*J97ZU!""!-0````]'5X2S;7ZH!!!A1&!!!Q!!!!%!!B.F=H*P=C"J<C!I<G]A:8*S<X)J!"*!-P````]):(6Q)("B>'A!!""!-0````](1W^O>'6O>!!71&-16G&S;7&C<'5N2GFM:5VB=!!!6!$Q!!Q!!Q!%!!1!"1!%!!1!"!!'!!=!#!!*!!I#!!"Y!!!.#!!!!!!!!!!!!!!.#Q!!!!!!!!!!!!!!!!!"%A!!!!I!!!!1!!!"%A!!!")!!!!!!1!,!!!!!! @@ -87,7 +87,16 @@ true 1 1 - 8400912 + 794644 + + + &Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!(9!!!!#Q!-1#%'=X2B>(6T!!!,1!-!"'.P:'5!!""!-0````]'=W^V=G.F!!!71&!!!Q!!!!%!!AFF=H*P=C"P>81!"!!!!("!=!!?!!"()5F/33V4>'&U;7-N6G&S;7&C<'5N5X6Q='^S>#ZM>GRJ9C.$5UUN5X2B>'FD,6:B=GFB9GRF,5VB<G&H:8)O<(:D<'&T=Q!@1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S)'^V>!!A1&!!!Q!!!!%!!B.F=H*P=C"J<C!I<G]A:8*S<X)J!"B!-0````]0=W6D>'FP<C"Q<X.U:GFY!":!-0````].1W^O:GFH>8*B>'FP<A"Q1(!!(A!!2S&*4EEN5X2B>'FD,6:B=GFB9GRF,6.V=("P=H1O<(:M;7)D1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S,GRW9WRB=X-!(E.443V4>'&U;7-N6G&S;7&C<'5N47&O97>F=C"J<A!!91$Q!!Q!!Q!%!!1!"1!%!!1!"!!%!!9!"Q!)!!E$!!"Y!!!.#!!!!!!!!!!!!!!.#Q!!!!!!!!!!!!!!!!!!!!!!!!A!!!)1!!!#%!!!!")!!!U!!!!-!!!!!!!!!!!!!!%!#A!!!!! + -1 + 128 + true + 1 + 1 + 34078736 &Q#!!!!!!!)!"1!&!!!-!%!!!@````]!!!!"!!%!!!()!!!!#Q!-1#%'=X2B>(6T!!!,1!-!"'.P:'5!!""!-0````]'=W^V=G.F!!!71&!!!Q!!!!%!!AFF=H*P=C"P>81!#!!S`````Q!71%!!!@````]!"!F';7RF)%RJ=X1!"!!!!("!=!!?!!"()5F/33V4>'&U;7-N6G&S;7&C<'5N5X6Q='^S>#ZM>GRJ9C.$5UUN5X2B>'FD,6:B=GFB9GRF,5VB<G&H:8)O<(:D<'&T=Q!@1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S)'^V>!!A1&!!!Q!!!!%!!B.F=H*P=C"J<C!I<G]A:8*S<X)J!("!=!!?!!"()5F/33V4>'&U;7-N6G&S;7&C<'5N5X6Q='^S>#ZM>GRJ9C.$5UUN5X2B>'FD,6:B=GFB9GRF,5VB<G&H:8)O<(:D<'&T=Q!?1V..,6.U982J9SV798*J97*M:3V.97ZB:W6S)'FO!!"B!0!!$!!$!!5!"A!(!!9!"A!'!!9!#!!'!!9!#1)!!(A!!!U)!!!*!!!!!!!!!!U,!!!!!!!!!!!!!!!!!!!!!!!!#A!!!!!!!!!!!!!!%!!!$1!!!!Q!!!!!!!!!!!!!!1!+!!!!!! diff --git a/INI-Static-Variable-Support/_Support/CSMSVMgr/Import Permanent Variable From File.vi b/INI-Static-Variable-Support/_Support/CSMSVMgr/Import Permanent Variable From File.vi index e0c3063..db82ee7 100644 Binary files a/INI-Static-Variable-Support/_Support/CSMSVMgr/Import Permanent Variable From File.vi and b/INI-Static-Variable-Support/_Support/CSMSVMgr/Import Permanent Variable From File.vi differ diff --git a/INI-Static-Variable-Support/_Support/CSMSVMgr/Import Variable From String.vi b/INI-Static-Variable-Support/_Support/CSMSVMgr/Import Variable From String.vi new file mode 100644 index 0000000..9796520 Binary files /dev/null and b/INI-Static-Variable-Support/_Support/CSMSVMgr/Import Variable From String.vi differ diff --git a/INI-Static-Variable-Support/_Support/CSMSVMgr/Mark All Temp Variables as Permanent.vi b/INI-Static-Variable-Support/_Support/CSMSVMgr/Mark All Temp Variables as Permanent.vi index bd9ca0c..7ae8a16 100644 Binary files a/INI-Static-Variable-Support/_Support/CSMSVMgr/Mark All Temp Variables as Permanent.vi and b/INI-Static-Variable-Support/_Support/CSMSVMgr/Mark All Temp Variables as Permanent.vi differ diff --git a/INI-Static-Variable-Support/_Support/CSMSVMgr/Read INI String.vi b/INI-Static-Variable-Support/_Support/CSMSVMgr/Read INI String.vi index 68ad8a2..f943c35 100644 Binary files a/INI-Static-Variable-Support/_Support/CSMSVMgr/Read INI String.vi and b/INI-Static-Variable-Support/_Support/CSMSVMgr/Read INI String.vi differ diff --git a/INI-Static-Variable-Support/_Support/CSMSVMgr/_Import Permanent Variable.vi b/INI-Static-Variable-Support/_Support/CSMSVMgr/_Import Permanent Variable.vi index a87ba98..b62c53a 100644 Binary files a/INI-Static-Variable-Support/_Support/CSMSVMgr/_Import Permanent Variable.vi and b/INI-Static-Variable-Support/_Support/CSMSVMgr/_Import Permanent Variable.vi differ diff --git a/INI-Static-Variable-Support/_Support/INI-FGV(lvlibp).vi b/INI-Static-Variable-Support/_Support/INI-FGV(lvlibp).vi index 998b972..454e3de 100644 Binary files a/INI-Static-Variable-Support/_Support/INI-FGV(lvlibp).vi and b/INI-Static-Variable-Support/_Support/INI-FGV(lvlibp).vi differ diff --git a/INI-Static-Variable-Support/_Support/INI-FGV.vi b/INI-Static-Variable-Support/_Support/INI-FGV.vi index 53c575a..6fdbd0b 100644 Binary files a/INI-Static-Variable-Support/_Support/INI-FGV.vi and b/INI-Static-Variable-Support/_Support/INI-FGV.vi differ diff --git a/INI-Static-Variable-Support/_Support/_fgv-oper.ctl b/INI-Static-Variable-Support/_Support/_fgv-oper.ctl index d118c2e..459ef14 100644 Binary files a/INI-Static-Variable-Support/_Support/_fgv-oper.ctl and b/INI-Static-Variable-Support/_Support/_fgv-oper.ctl differ diff --git a/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(en-us).md b/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(en-us).md index 894748f..72d5de7 100644 --- a/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(en-us).md +++ b/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(en-us).md @@ -29,7 +29,7 @@ Variable Syntax: `${section.variable:defaultValue}` - Step2.3: In the code for this part, note that CSM INI Variable Support is not limited to parameters. It can be used with any field. - Step2.4: Expected result for the code execution in Step2.3. - + ## Loading Configuration by Providing a Cluster Prototype (2. Load the corresponding configuration by providing the prototype.vi) @@ -98,7 +98,7 @@ Data sources may include: information sent via message parameters, parameters in - Step5.1: `Convert API String to Cluster(Default in Session).vim` conversion. The "non-existing module" section does not exist, so the provided reference data is used, resulting in IP:127.0.0.1 and port:80. - Step5.2: `Convert API String to Cluster(Default in Session).vim` conversion. Load configuration from the given section/key, but neither exists. The provided reference data is used, resulting in IP:127.0.0.1 and port:80. - + ## Multi-file Configuration System (4. Multi-file configuration system.vi) @@ -202,7 +202,7 @@ path = ${root}/${info.operator}/${info.date}/${info.test}${info.time}.tdms Using the configuration file example above: -**Scenario 1:** Reading `${file.path}` returns an actual file path dynamically composed of other configuration items, enabling flexible path definitions. +**Scenario 1:** Reading `${file.path}` returns an actual file path dynamically composed of other configuration items, enabling flexible path definitions. **Scenario 2:** The `[case1]` and `[case2]` sections define two different sets of related configuration information. By modifying `${RT.select}`, you can switch the result of accessing `${RT.addr}`. @@ -239,4 +239,16 @@ You can use `CSM - Write Configuration Variable.vi` and `CSM - Write INI String. - By default, configurations modified in memory are not automatically synchronized to the configuration file. You need to call `CSM - Sync Configuration Variables to File.vi` to synchronize them to the file. - Modified variables will only be preserved when synchronized to the file if the original configuration file defined those specific configuration items. If the original configuration file did not define certain items, the modified variables are saved only in memory by default and are not synchronized to the file. -- You can call `CSM - Mark All Temp Variables as Permanent.vi` to mark all temporary variables as permanent, ensuring that all variables are preserved when synchronized to the configuration file. \ No newline at end of file +- You can call `CSM - Mark All Temp Variables as Permanent.vi` to mark all temporary variables as permanent, ensuring that all variables are preserved when synchronized to the configuration file. + +## Loading Configuration Variables From String (8. import Configuration From String.vi) + +### Overview + +This example demonstrates how to load configuration variables directly from a string without creating a configuration file. + +The effect is equivalent to writing configuration variables one by one through APIs. This can simplify the code. All configuration information will be cached in temporary variable space. + +### Introduction + +CSM INI Variable Support API provides an API for loading configuration variables from a string. You can use `CSM - Load Configuration Variables From String.vi` to load configuration variables from a string. The effect is equivalent to writing configuration variables one by one through APIs. This can simplify the code. All configuration information will be cached in temporary variable space. \ No newline at end of file diff --git a/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(zh-cn).md b/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(zh-cn).md index 9a15be9..b0744f3 100644 --- a/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(zh-cn).md +++ b/help/NEVSTOP/Communicable State Machine(CSM)/Examples/CSM INI-Variable Support(zh-cn).md @@ -221,4 +221,18 @@ CSM INI Variable Support提供了修改配置信息的API。您可以使用这 - 可以调用`CSM - Mark All Temp Variables as Permanent.vi`将所有临时变量标记为永久变量,这样在同步保存到配置文件时,所有变量都会被保留下来。 +## 从字符串加载配置变量(8. import Configuration From String.vi) + +### Overview + +本范例用于展示如何从字符串加载配置变量,而不需要创建配置文件。 + +这样效果与使用 API 逐条写入配置变量相同。可以简化代码。所有的配置信息都将缓存在临时变量空间中。 + +### Introduction + +CSM INI Variable Support API提供了从字符串加载配置变量的API。您可以使用`CSM - Load Configuration Variables From String.vi`来从字符串加载配置变量。这样效果与使用 API 逐条写入配置变量相同。可以简化代码。所有的配置信息都将缓存在临时变量空间中。 + + + diff --git a/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon INI-Variable.md b/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon INI-Variable.md index 156b8a8..7fd6d2a 100644 --- a/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon INI-Variable.md +++ b/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(en-us)/VI Description(en-us) - Addon INI-Variable.md @@ -273,6 +273,19 @@ Loads configuration variables from a specified file. If the section name postfix - Configuration Path: Configuration file path. - Section Postfix (""): Section name postfix. +### CSM - Load Configuration Variables From String.vi +Loads configuration variables from a specified string. If the section name postfix is not empty, the loaded section names will have this postfix appended. + +Section Postfix ("") is primarily used when loading multiple configuration files that have identical sections. For example, two configuration files `Hardware1.ini` and `Hardware2.ini` both have a section named `Serial` with identical internal keys indicating serial port configuration. In this case, the configuration in the file loaded later would overwrite the configuration in the file loaded earlier. Using Section Postfix ("") prevents section name conflicts. + +Reference Example: `8. import Configuration From String.vi`. + +> - Ref: CSM INI-Variable Configuration File Path + +-- Controls -- +- Configuration String: Configuration string. +- Section Postfix (""): Section name postfix. + ### CSM - Unload Configuration Variable File.vi Unloads a configuration variable file. diff --git a/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon INI-Variable.md b/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon INI-Variable.md index 732bc60..30c8c63 100644 --- a/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon INI-Variable.md +++ b/help/NEVSTOP/Communicable State Machine(CSM)/VI Description/VI Description(zh-cn)/VI Description(zh-cn) - Addon INI-Variable.md @@ -272,6 +272,20 @@ - Configuration Path: 配置文件路径。 - Section Postfix (""): 节名后缀。 + +### CSM - Load Configuration Variables From String.vi +从指定字符串加载配置变量。如果节名后缀不为空,载入的节名称会加上该后缀。 + +Section Postfix ("")主要用于载入多个配置文件但具有相同节的情况。例如: 两个配置文件`Hardware1.ini`和`Hardware2.ini`,都有一个名为`Serial`的节且内部的Keys相同(表示串口配置),那么后载入的文件中的配置会覆盖先载入的文件中的配置。使用Section Postfix ("")可以避免节名冲突。 + +参考范例: `8. import Configuration From String.vi`。 + +> - Ref: CSM INI-Variable配置文件路径 + +-- 输入控件(Controls) -- +- Configuration String: 配置字符串。 +- Section Postfix (""): 节名后缀。 + ### CSM - Unload Configuration Variable File.vi 卸载配置变量文件。 diff --git a/test/Example/Example/CSM with INI Config.vi b/test/Example/Example/CSM with INI Config.vi index 2be8d4b..28fd2b8 100644 Binary files a/test/Example/Example/CSM with INI Config.vi and b/test/Example/Example/CSM with INI Config.vi differ diff --git a/test/Example/testcase - Convert API String to Cluster.vi b/test/Example/testcase - Convert API String to Cluster.vi index 1b059eb..9af6dfc 100644 Binary files a/test/Example/testcase - Convert API String to Cluster.vi and b/test/Example/testcase - Convert API String to Cluster.vi differ diff --git a/test/test performance.vi b/test/test performance.vi index a9e6be9..c91e909 100644 Binary files a/test/test performance.vi and b/test/test performance.vi differ diff --git a/testcases/csm-ini-variable-addon/testVIs/test - NESTED read.vi b/testcases/csm-ini-variable-addon/testVIs/test - NESTED read.vi index 6da8f51..1f584d4 100644 Binary files a/testcases/csm-ini-variable-addon/testVIs/test - NESTED read.vi and b/testcases/csm-ini-variable-addon/testVIs/test - NESTED read.vi differ diff --git a/testcases/csm-ini-variable-addon/testVIs/test - Sync param Value to the top INI.vi b/testcases/csm-ini-variable-addon/testVIs/test - Sync param Value to the top INI.vi index 26f0abd..a4eae10 100644 Binary files a/testcases/csm-ini-variable-addon/testVIs/test - Sync param Value to the top INI.vi and b/testcases/csm-ini-variable-addon/testVIs/test - Sync param Value to the top INI.vi differ diff --git a/testcases/csm-ini-variable-addon/testVIs/test - github 85 cannot write parameters into empty ini.vi b/testcases/csm-ini-variable-addon/testVIs/test - github 85 cannot write parameters into empty ini.vi index a7837f3..4a061dc 100644 Binary files a/testcases/csm-ini-variable-addon/testVIs/test - github 85 cannot write parameters into empty ini.vi and b/testcases/csm-ini-variable-addon/testVIs/test - github 85 cannot write parameters into empty ini.vi differ diff --git a/testcases/csm-ini-variable-addon/testVIs/test - load and unload.vi b/testcases/csm-ini-variable-addon/testVIs/test - load and unload.vi index 2dbee5a..9e83d87 100644 Binary files a/testcases/csm-ini-variable-addon/testVIs/test - load and unload.vi and b/testcases/csm-ini-variable-addon/testVIs/test - load and unload.vi differ diff --git a/testcases/csm-ini-variable-addon/testVIs/test - read Cluster From Session.vi b/testcases/csm-ini-variable-addon/testVIs/test - read Cluster From Session.vi index b87da25..2874f33 100644 Binary files a/testcases/csm-ini-variable-addon/testVIs/test - read Cluster From Session.vi and b/testcases/csm-ini-variable-addon/testVIs/test - read Cluster From Session.vi differ diff --git a/testcases/csm-ini-variable-addon/testVIs/test - restore variable value.vi b/testcases/csm-ini-variable-addon/testVIs/test - restore variable value.vi index abee6e2..aa80bc4 100644 Binary files a/testcases/csm-ini-variable-addon/testVIs/test - restore variable value.vi and b/testcases/csm-ini-variable-addon/testVIs/test - restore variable value.vi differ diff --git a/testcases/csm-ini-variable-addon/testVIs/test - submodule case.vi b/testcases/csm-ini-variable-addon/testVIs/test - submodule case.vi index eb1d5f7..c81a69c 100644 Binary files a/testcases/csm-ini-variable-addon/testVIs/test - submodule case.vi and b/testcases/csm-ini-variable-addon/testVIs/test - submodule case.vi differ